原文地址:http://hi.baidu.com/jk_cau/blog/item/0ce5444bbcf8b7f583025cfc.html
定义:允许一个类将对其非公有成员的访问权授予指定的类或函数(分别是友元类和友元函数)。(C++ primer 4e)
说明:友元是非成员函数,即它并不是授予友元关系的那个类的成员,它的声明可以出现在类中的任何地方(因此它们也不受其声明出现部分的访问控制的影响)
编程风格:虽然友元的声明可以出现在类中任何地方,但是将友元声明成组的放在类定义的开始或者结尾是个好主意。
注:1、当将类A的成员函数F声明为类B的友元时,必须在B的定义中将F用A限定。
2、友元函数只能访问对象的私有成员,不能直接访问类的私有成员(因此在调用友元时,必须在实参中指定友元要访问的类的对象)。
两个性质:
1、不具有传递性。
即:假设B是A的友元类,C是B的友元函数,那么C不能直接访问A的私有成员。
2、不具有继承性。
即:假设B是基类A的友元函数,C是A的继承类,那么B不能直接访问C的私有成员。
// 如果派生类想要将自己成员的访问权授予其基类的友元,派生类必须显式地这样声明友元。 //基类的友元对从该基类派生的类型没有特殊访问权限。
class A
{
friend class C;
}
class B : public A
{
friend class C; //friend 无法继承
}
class C
{
}
// 同样,如果基类和派生类都需要访问另一个类,则那个类必须特地将访问权限授予基类和每一个派生类.
class A
{
}
class B : public A
{
}
class C
{
friend class A;
friend class B;
}