C ++的朋友继承?

时间:2011-09-10 10:27:47

标签: c++ subclass friend

子类是否继承,主类的朋友关联(主类'自己和其他类与主类相关)?

或者换句话说,继承如何应用于friend关键字?

扩展: 如果没有,有没有办法继承友谊?

我遵循Jon的建议来提出设计问题:
C++ class design questions

4 个答案:

答案 0 :(得分:37)

友谊不是在C ++中继承的。

标准说明(ISO / IEC 14882:2003,第11.4.8节):

  

友谊既不是遗传也不是传递。

答案 1 :(得分:8)

您可以在父级中创建(静态)受保护的方法,以允许您执行此类操作。

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);
        // ....
    } // ()
};

然而,这绕过了封装,所以你可能应该再看一下你的设计。

答案 2 :(得分:7)

朋友只适用于您明确使其成为朋友的类,而不适用于其他类。

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

答案 3 :(得分:2)

答案很简单:不,子类不继承朋友关联。朋友只能访问声明该关联的类的私有成员,而不能访问该类的父母和/或子女的私有成员。虽然您可能是超类的受保护成员,但我不确定。

相关问题