c ++基类包含派生类的实例

dje*_*990 1 c++ oop inheritance class

我想知道是否有人可以向我解释我如何能够实现类似于此的东西:

namespace advanced_cpp_oop
{
  class A
  {
    B b;
  };

  class B : public A
  {
  };
}

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

基类的实例可以包含派生类的实例吗?编译上面的代码时,会生成以下错误:

g++ advanced_cpp_oop.cpp 
advanced_cpp_oop.cpp:8:5: error: ‘B’ does not name a type
Run Code Online (Sandbox Code Playgroud)

编译的(几乎)等效的Java代码是:

public class AdvancedCppOop
{
  public static void main(String[] args)
  {
    A a;
  }
}

class A
{
  B b;
}

class B extends A
{
}
Run Code Online (Sandbox Code Playgroud)

谢谢

And*_*ter 5

你需要一个指针和一个前向声明:

namespace advanced_cpp_oop
{
  class B;

  class A
  {
    B* b;
  };

  class B : public A
  {
  };
}
Run Code Online (Sandbox Code Playgroud)

在您的C++代码中,您正在创建class B内部实例class A,这是不可能的,因为编译器还不知道任何内容(特别是不是大小)class B.

使用我的答案中的代码,您需要动态分配一个实例class B并将其分配给b代码中其他位置的指针.

从侧面说明,从设计的角度来看,这并没有多大意义,因为父类不应该依赖于子类.