46 lines
956 B
C++
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;
|
||
|
}
|