继承没有包含?

时间:2011-04-06 22:31:12

标签: c++

我有A班。我有B班。我有很多班来自B班。

我想实现这一点:B的衍生物应该可以访问A的受保护变量。每个变量都包含A的实例,这需要大量的内存。 所以我猜这次公共继承不是一个好主意。我该如何解决这个问题? 谢谢!

3 个答案:

答案 0 :(得分:5)

您可以使用friend和访问者功能执行此操作。这确实可以信任B以保持A的私有性 - 看不到让 B和子类只访问的好方法/ em> A的受保护成员,除非AB之间存在继承关系。

class A {
friend class B;
protected:
  int X;
};


class B {
protected:
  static int getX(A const & a) { return a.X; }
};

class C : public B {
public:
  void foo(A const & a) { int bar = getX(a); }
};

答案 1 :(得分:0)

制作派生自A的B朋友的课程。

答案 2 :(得分:0)

据我所知,B的孩子与班级A无关,因此不应该访问A 的非公开部分。< / p>

A子类中访问B数据的正确方法是通过A的公共接口。如果这样的公共接口不够用,那么这就是一个信号,要么你正在尝试做一些设计不好的事情,要么需要改进A的公共接口。