C++ C++;朋友继承?
子类是否继承主类的友元关联(包括主类自己的类和与主类友元的其他类) 或者换句话说,继承如何应用于friend关键字 要扩展: 如果没有,有没有办法继承友谊 我按照乔恩的建议张贴了设计问题:C++ C++;朋友继承?,c++,subclass,friend,C++,Subclass,Friend,子类是否继承主类的友元关联(包括主类自己的类和与主类友元的其他类) 或者换句话说,继承如何应用于friend关键字 要扩展: 如果没有,有没有办法继承友谊 我按照乔恩的建议张贴了设计问题: 不是C++继承的。 本标准规定(ISO/IEC 14882:2003,第11.4.8节): 友谊既不是继承的,也不是传递的 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:我的评论说这取决于继承的类型,这就是我在示例中所展示的。你认为我的例子还显示了什么?这似乎更适用于其他相关问题。反应很好。我正在考虑重新设计。