2012-04-18 60 views
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 
} 

回答

3

离开它是(有friend class parent),并添加一个访问功能parentAB,......会使用。它会受到保护,所以来自层次结构之外的功能无法使用它。

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

你必须这样做,因为友谊不会延伸到派生类。

+0

我稍微修改的功能,使其成为问题的描述相符。 – 2012-04-18 16:34:54

+0

好吧,我明白了,我感觉它会起作用。 我想有一个更简单的方法,我可以做到这一点没有任何setter和getter函数。我很高兴为什么C++默认不支持。 但是有总比没有好得多。 谢谢。 – deeagle 2012-04-18 16:59:45

0

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

int getPrivateMember() const { return privateMEmber; }

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

0

这里的答案很简单,不要去与其他类的内部状态搞混。相反,使用他们的公共API。这样,你永远不用担心自己锁定到实现和你避免各种各样的潜在问题无意中打破类不变,当你修改的变量。