友谊:来自同一父母的许多课程

时间:2012-04-18 16:22:22

标签: c++

如果在所有派生类中没有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 个答案:

答案 0 :(得分:3)

保持原样(使用friend class parent)并向parentA,...将使用的B添加访问者功能。它将受到保护,因此层次结构外部的函数无法使用它。

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

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

答案 1 :(得分:0)

你可以创建一个getter函数,它将返回一个privateMember:

int getPrivateMember() const { return privateMEmber; }

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

答案 2 :(得分:0)

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