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)
谢谢
你需要一个指针和一个前向声明:
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代码中其他位置的指针.
从侧面说明,从设计的角度来看,这并没有多大意义,因为父类不应该依赖于子类.