在类的定义中进行友元的声明仅仅指定了访问的权限,而非一个通常意义上的函数声明。如果我们要调用友元函数,那么我们就必须在友元声明之外再对函数进行一次声明。
为了使友元函数对类的用户可见,我们通常将友元的函数声明与类放在同一个头文件中。
虽然有些编译器并未强制限定友元函数必须在使用之前在类的外部进行声明,但是我们最好这样做,因为如果更换了一个有如此强制要求的编译器我们也无须对代码进行改动。
如果一个类制定了友元类,那么该友元类的成员函数都可以访问此类的任何成员,包括私有成员。
// 该代码块的头文件为A.h includeclass A { public: void f(B b); private: int b; }; void A::f(B b) { b.i = 1; // 友元类成员函数访问私有成员 }
// 该代码块的头文件为B.h
class A;
class B
{
friend class A;
private:
int i;
};
也可以领成员函数作为友元
class B
{
friend void A::f(B b);
};
**注意:**友元关系不存在传递性,也就是说如果A有自己的友元C,那么C不能理所当然的具有访问B的特权。



