gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:11:17 26 4
gpt4 key购买 nike

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

namespace advanced_cpp_oop
{
class A
{
B b;
};

class B : public A
{
};
}

int main()
{
}

基类的实例在哪里可以包含派生类的实例?编译上述代码时会产生以下错误:

g++ advanced_cpp_oop.cpp 
advanced_cpp_oop.cpp:8:5: error: ‘B’ does not name a type

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

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

class A
{
B b;
}

class B extends A
{
}

谢谢

最佳答案

您需要添加一个指针和一个前向声明:

namespace advanced_cpp_oop
{
class B;

class A
{
B* b;
};

class B : public A
{
};
}

在您的 C++ 代码中,您正在 class A 中创建 class B 的实例,这是不可能的,因为编译器还不知道任何事情(尤其是不知道B 类 的大小)。

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

旁注,从设计的角度来看,这实际上没有意义,因为父类不应该依赖于子类。

关于c++基类包含派生类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14286534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com