一、友元
类可以允许其他类或者函数访问它的非公有成员,方法是令其他类或者函数成为它的友元。如果类想把一个函数作为它的友元,只需要增加一条以friend关键字开始的函数声明语句即可:
class Data
{
//为Data的非成员函数所做的友元声明
friend Data add();
friend std::istream &read();
};
//Data接口的非成员组成部分的声明
Data add();
std::istream &read();
友元声明只能出现在类定义的内部,但是出现的具体位置不限。友元不是类的成员也不受它所在区域访问控制级别的约束。
二、友元的声明
友元的声明仅仅指定了访问的权限,而非一个通常意义上的函数声明。如果希望类的用户能够调用某个友元函数,那么必须在友元声明之外再专门对函数进行一次声明。
通常把友元的声明与类本身放置在同一个头文件中(类的外部)。
class X{
friend void f(){ /*友元函数可以定在类的内部*/}
X(){ f();} //错误:f()没有被声明
void g();
void h();
};
void X::g(){ return f();} //错误:f()没有被声明
void f(); //声明X中的f()函数
void X::h(){ return f();} //正确:现在f()的声明在作用域中了