类的友元函数(friend function)在类范围之外定义,但有权访问类的private(或继承中的受保护)成员。函数或整个类都可以声明为另一个类的友元。
要将函数声明为类的友元,就要在类定义中的函数原型前面加上friend关键字。要将类classTwo声明为类classOne的友元,在类classOne的定义中声明如下:
friend class classTwo;
private、protected和public的成员访问符号与友元关系的声明无关,因此友元关系声明可放在类定义中的任何地方。
将类中所有友元关系的声明放在类的首部之后,不要在其前面加上任何成员访问说明符。
*友元关系是“给予”的,而不是“索取”的,即让B成为A的友元,A要显式声明B为自己的友元。友元关系既不对称也不能传递。
#include <iostream>
using namespace std;
class Count{
friend void setX(Count &,int); //friend declaration
public:
Count() { x = 0;} //constructor
void print() const { cout << x << endl;}
private:
int x; //data member
};
void setX(Count &c,int val)
{
c.x = val;
}
int main()
{
Count counter;
cout << "counter.x after instantiation: "; //实例化后
counter.print();
cout << "counter.x after call to setX friend function: ";
setX(counter,8);
counter.print();
return 0;
}