如果Derived类是从类Base私下继承而Derived类有一个友元函数f(),那么成员可以从Derived类和Base类访问f().
class Base {
public:
int a;
protected:
int b;
private:
int c;
};
class Derived: private Base {
void friend f() {}
public:
int d;
protected:
int e;
private:
int f;
};
Run Code Online (Sandbox Code Playgroud)
我理解如果一个类是从基类私下继承的,那么派生类中的所有东西都是私有的.
但为什么在上面的代码中,函数f()可以访问a,b,d,e,f而不是c?
'Friendship'授予访问声明朋友的类的权限 - 它不是传递的.使用一个坏的比喻 - 我的朋友不一定是我爸爸的朋友.
C++ FAQ有一些更详细的信息:
一个朋友Derived
可以准确地访问Derived
它本身可以 - 也就是说,任何基类的任何成员Derived
,任何公共或受保护成员,或任何公共或受保护的祖父类,但不能访问基类的任何私有成员或成员私人祖父母班.