当前位置: 首页 > 文档资料 > C++大学教程 >

12.7 模板与友元

优质
小牛编辑
121浏览
2023-12-01

函数和整个类都可以声明为非模板类友元。使用类模板,可以声明各种各样的友元关系。友元可以在类模板与全局函数间、另一个类(可能是模板类)的成员函数间或整个类中(可能是模板类)建立。建立这种友元关系的符号可能很繁琐。

在下列X类的类模板中声明为:

template<class T>class X

下列友元声明:

friend void f1();

使函数f1成为从上述类模板实例化的每个模板类的友元。

在下列X类的类模板中声明为:

template<class T>class X

下列友元声明:

friend void f2(X< T > 6);

对特定类型T(如float)使函数f2(X<float>&)成为X<float>的友元。

在类模板中,可以声明另一个类的成员函数是类模板产生的任何模板类的友元。只要用类名和二元作用域运算符指定其它类的成员函数名。例如,在下列X类的类模板中声明为:

template<class T>class X

下列友元声明:

friend void A::f4();

使A类的成员函数f4成为上述类模板实例化的任何模板类的友元。

在下列X类的类模板中声明为:

template<class T>class X

下列友元声明:

friend void C< T >::f5( X< T > & );

对特定类型T(如float)使成员函数:

C<float>::f5( X< float> & );

成为 X<float> 模板类的友元函数。

在下列X类的类模板中声明为:

template<Class T>Class X

可以声明第二个类Y,如下所示:

friend class Y;

使Y类的每个成员函数成为X的类模板产生的每个模板类的友元。

在下列X类的类模板中声明为:

template<class T>class X

可以声明第二个类Z,如下所示:

friend class Z< T >;

使模板类用特定类型T(如float)实例化时,class Z<float> 的所有成员成为模板类X<float>的友元。