0

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   
}
4

3 回答 3

3

保持原样(使用)并为, , ...friend class parent添加一个访问器函数将使用。它将受到保护,因此层次结构之外的功能无法使用它。parentAB

class parent {
protected:
  static int& getPrivate( MyClass & c ) { return c.privateMember; }
...
};

您必须这样做,因为友谊不会扩展到派生类。

于 2012-04-18T16:27:59.833 回答
0

您可以创建一个 getter 函数,该函数将返回一个 privateMember:

int getPrivateMember() const { return privateMEmber; }

当然,这必须是公共方法。

于 2012-04-18T16:29:34.483 回答
0

这里的简单答案是不要与其他类的内部状态混为一谈。相反,使用他们的公共 API。这样您就不必担心将自己锁定在实现中,并且您可以避免在修改变量时无意中破坏类不变量的各种潜在问题。

于 2012-04-18T16:30:13.437 回答