不包含的继承

Inheritance without containing?

本文关键字:继承 包含      更新时间:2023-10-16

我有a类,我有b类,我有很多很多从b类派生的类。

我想实现这一点:B的导数应该可以访问A的受保护变量,而不是每个都包含A的实例,这将需要大量的内存。所以我想这次公共继承不是个好主意。怎么解呢?谢谢!

您可以使用friend和访问器函数来完成此操作。这确实相信B会远离A的私有——除非AB之间存在继承关系,否则不能让 B和子类访问 A的受保护成员。

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); }
};

使B的类为a的友类

根据我的理解,B的孩子与A类无关,因此不应该访问A 的非公开部分。

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