gpt4 book ai didi

c++ - 在 C++ 中从纯虚拟更改为虚拟

转载 作者:太空宇宙 更新时间:2023-11-04 16:21:33 25 4
gpt4 key购买 nike

我有一个包含 5 个子类的基类。

如果在我的基类中我有这个:

virtual CpuPort &getsecondDataPort()=0;

那么这意味着必须为所有子类实现该方法,对吧?

但我不想这样,因为我知道只有当我有一个特定子类的对象时我才会调用该方法,所以我认为我可以这样写:

virtual CpuPort &getsecondDataPort();

并且只在我想要的子类中实现它。但这给了我这个错误:

/base.cc:254: undefined reference to `vtable for BaseCPU'

在其他子类中:

undefined reference to `typeinfo for BaseCPU'

其中 BaseCPU 是我的基类对象。

因为它是更大库(实际上是模拟器)的一部分,所以我想尽可能少地进行更改。所以请不要建议“只在你的子类中定义”之类的东西,因为我想遵循目前为止代码的组织方式,除非这是解决问题的唯一方法。

知道为什么会发生这种情况吗?

谢谢

最佳答案

this means that the method has to be implemented for all the subclasses, right?

只有当你想创建那些子类的直接实例时。如果子类不实现纯虚函数,它将是抽象的 - 这本身是允许的。

But that gives me this error:

这是因为虚函数是声明的,但没有定义。如果函数不是纯虚拟的,则必须提供定义。

在这种情况下,您不能提供一个什么都不做的虚拟实现,因为您的函数应该返回一个引用,并且从返回值函数的末尾流出而不返回任何东西是未定义的行为 根据 C++11 标准的第 6.6.3/2 段。

另一方面,如果您的基类有一个类型为 CpuPort 的数据成员(例如)myCpuPort,您可以这样做:

virtual CpuPort &getsecondDataPort() { return myCpuPort; }

关于c++ - 在 C++ 中从纯虚拟更改为虚拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16120841/

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