如果在所有派生类中没有privateMember
,我怎样才能到达friend
?
class parent{...}; //a virtual class
class A: public parent{...};
class B: public parent{...};
class C: public parent{...};
class D: public parent{...};
class E: public parent{...};
...
//each has a function, that want access to privateMember
class MyClass{
int privateMember;
friend parent;
//I know it doesnt't work, but this shows the best what I want
}
答案 0 :(得分:3)
保持原样(使用friend class parent
)并向parent
,A
,...将使用的B
添加访问者功能。它将受到保护,因此层次结构外部的函数无法使用它。
class parent {
protected:
static int& getPrivate( MyClass & c ) { return c.privateMember; }
...
};
你必须这样做,因为友谊不会扩展到派生类。
答案 1 :(得分:0)
你可以创建一个getter函数,它将返回一个privateMember:
int getPrivateMember() const { return privateMEmber; }
当然,这必须是一种公共方法。
答案 2 :(得分:0)
这里的简单答案是不要忽视其他类的内部状态。相反,使用他们的公共API。这样您就不必担心将自己锁定到实现中,并且在修改变量时无意中破坏了类不变量,从而避免了各种潜在的问题。