开发者

friend function in derived class with private inheritance

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

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜