Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;朋友继承?_C++_Subclass_Friend - Fatal编程技术网

C++ C++;朋友继承?

C++ C++;朋友继承?,c++,subclass,friend,C++,Subclass,Friend,子类是否继承主类的友元关联(包括主类自己的类和与主类友元的其他类) 或者换句话说,继承如何应用于friend关键字 要扩展: 如果没有,有没有办法继承友谊 我按照乔恩的建议张贴了设计问题: 不是C++继承的。 本标准规定(ISO/IEC 14882:2003,第11.4.8节): 友谊既不是继承的,也不是传递的 friend仅适用于您显式使其成为friend的类,而不适用于其他类 答案很简单:不,子类不继承好友关联。朋友只能访问该协会声明所在类的私人成员,而不能访问该类的家长和/或子女的私人成员

子类是否继承主类的友元关联(包括主类自己的类和与主类友元的其他类)

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

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

我按照乔恩的建议张贴了设计问题:

<友情>不是C++继承的。

本标准规定(ISO/IEC 14882:2003,第11.4.8节):

友谊既不是继承的,也不是传递的


friend仅适用于您显式使其成为friend的类,而不适用于其他类


答案很简单:不,子类不继承好友关联。朋友只能访问该协会声明所在类的私人成员,而不能访问该类的家长和/或子女的私人成员。虽然您可能是超类的受访问保护的成员,但我不确定这一点。

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

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

但是,这绕过了封装,因此您可能应该重新检查一下您的设计。

是否有任何方法使其能够继承?@SSight3:否,您需要明确地将层次结构中的所有类交给好友(可能需要源代码预处理器的帮助)。如果您有特定的问题需要解决,请明确询问。如果您的设计需要继承友谊,这很好地表明您的设计需要更改。此功能的用例是什么?根据您实际想要完成的内容,除了让所有类都这样做之外,可能还有其他选择friendly@David:我将包括一个指向描述情况的问题的链接。@Als它可以方便地与访问者模式相关。然后,我想我应该明确地为每个特定的访问者方法建立朋友关系。派生类始终可以访问基类的受保护成员,这是通过继承而不是朋友关系实现的。@Als:
派生类始终可以访问基类的受保护成员。不,实际上要看情况而定。取决于继承的种类@纳瓦兹:不是真的!对你来说应该是一本很好的读物。@Nawaz:你的评论和你的程序显示的是两件不同的事情。@Als:我的评论说这取决于继承的类型,这就是我在示例中所展示的。你认为我的例子还显示了什么?这似乎更适用于其他相关问题。反应很好。我正在考虑重新设计。