开发者

friend function in derived class with private inheritance

开发者 https://www.devze.com 2022-12-18 16:53 出处:网络
If a class Derived is inherited privately from a class Base and the Derived class has a friend function f(), so what members can f() access from Derived class and Base class.

If a class Derived is inherited privately from a class Base and the Derived class has a friend function f(), so what members can f() access from Derived class and Base class.

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;
};

I understand that if a class is inherited privately from the base class, everything is private in the derived class.

But why in the code above, the function f() can access a, b, d, 开发者_StackOverflow社区e, f but not c?


'Friendship' grants access to the class that declares the friend - it's not transitive. To use a bad analogy - my friends are not necessarily my dad's friends.

The C++ FAQ has a bit more detail:

  • http://www.parashift.com/c++-faq-lite/friends.html#faq-14.4


A friend of Derived can access exactly what Derived itself can - that is, any member of Derived, and any public or protected member of any base class, or of any public or protected grand-parent class, but not any private members of base classes, or members of private grand-parent classes.


Private members are not accessible in derived classes.


The friend function has access to all members of Derived. It doesn't have access to any members of Base that Derived can't access. Derived can't access Base::c because Base::c is private.

0

精彩评论

暂无评论...
验证码 换一张
取 消