子类是否继承,主类的朋友关联(主类'自己和其他类与主类相关)?
或者换句话说,继承如何应用于friend关键字?
扩展: 如果没有,有没有办法继承友谊?
我遵循Jon的建议来提出设计问题:
C++ class design questions
答案 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)
朋友只适用于您明确使其成为朋友的类,而不适用于其他类。
答案 3 :(得分:2)
答案很简单:不,子类不继承朋友关联。朋友只能访问声明该关联的类的私有成员,而不能访问该类的父母和/或子女的私有成员。虽然您可能是超类的受保护成员,但我不确定。