qfedu-cpp-level/day7/d11.cpp

46 lines
956 B
C++

// 模版类与友元
// 外部实现的友元函数
// 是函数模板时,必须在类定义之前声明。在类中声明友元全局函数时,必须使用<> 空泛型表示此函数是函数模板。
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
template <typename T>
class A;
template <typename T>
void showOut(A<T> &a);
template <typename T>
class A
{
// 外部实现的友元函数,它有自己的模版类型,不需要指定当前模版类的类型
// <>空泛型表示外部是函数模版,模版的泛型同当前类的泛型
// 要求: 必须之前先声明此函数为构造函数
friend void showOut<>(A<T> &a);
private:
T item;
public:
A(T item)
{
this->item = item;
}
};
template <typename T>
void showOut(A<T> &a) // 全局友元函数
{
cout << "out item is: " << a.item << endl;
}
int main()
{
A<int> a(30);
showOut(a);
return 0;
}