C++ friend inheritance?

2019-01-23 11:26发布

Does a subclass inherit, the main class' friend associations (both the main class' own and other classes friended with the main class)?

Or to put it differently, how does inheritance apply to the friend keyword?

To expand: And if not, is there any way to inherit friendship?

I have followed Jon's suggestion to post up the design problem:
C++ class design questions

4条回答
趁早两清
2楼-- · 2019-01-23 11:48

The answer is very simple: no, subclasses do not inherit friend associations. A friend can only access the private members of the class the association is declared in, not those of parents and/or children of that class. Although you might be access protected member of a superclass, but I'm not sure about that.

查看更多
冷血范
3楼-- · 2019-01-23 11:56

friend only applies to the class you explicitly make it friend and no other class.

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

查看更多
倾城 Initia
4楼-- · 2019-01-23 11:56

You can create (static) protected methods in the parent that will allow you to do things like that.

class MyFreind
{
private:
    int m_member;
    friend class Father;
};

class Father
{
protected:
    static int& getMyFreindMember(MyFreind& io_freind) { return io_freind.m_member; }
};

class Son : public Father
{
public:
    void doSomething(MyFriend& io_freind)
    {
        int& friendMember = getMyFreindMember(io_freind);
        // ....
    } // ()
};

This however bypasses encapsulation so you probably should take a second look at your design.

查看更多
戒情不戒烟
5楼-- · 2019-01-23 12:04

Friendship is not inherited in C++.

The standard says (ISO/IEC 14882:2003, section 11.4.8):

Friendship is neither inherited nor transitive.

查看更多
登录 后发表回答