和其他类一样,基类或派生类可以使其他类或函数成为友元。---(被友元的类和函数需另自行定义)
友元可以访问类的private和protected数据,但不能继承,基类的友元对派生类的成员没有特殊访问权限。
比如有个类:
class Base
{ friend class Frnd;protected: int i;};// Frnd并非类D1的友元类:
class D1 : public Base
{
protected:
int j;
};
class Frnd
{
public:
int mem(Base b) {return b.i; } // OK
int mem(D1 d){return d.i; } //ERROR
};
// D2也一样没权限的
class D2 : public Frnd
{
public:
int mem(Base b) { return b.i; } //ERROR
}
所以,好朋友是不能共享的…
当甲把乙作为了好朋友,那么乙就能访问甲了,但甲还不能访问乙,除非乙也把甲作为好朋友…
成了好朋友,就能访问他的私有数据了…好基友啊