ad

没法将变量声明为抽象类型,由于虚拟函数是纯洁的 - 带有多个继承-英雄云拓展知识分享

匿名投稿 205 2024-01-22

我已看到了此类问题的多个答案,但我没有解决问题。主要问题多是我正在研究他人的代码,但是嗯。这是此问题的简化示例:我有一个链接许多其他类的类:

class Interface

: public system_atoms,

public system_io,

/* etc, others */

{

/* A few functions, none that matters here - none from the inherited classes redefined */

}

没法将变量声明为抽象类型,由于虚拟函数是纯洁的 - 带有多个继承-英雄云拓展知识分享

内部system_atoms,我有:

class system_atoms {

public:

virtual int init_atom(int atom_number) = 0;

virtual int check_atom_id(int atom_number) = 0;

}

而且我有一个应当从接口继承的类:

class Interface_proxy : public Interface {

public:

/* stuff - no function from the inherited classes redefined */

}

在.cpp中:

Interface_proxy global_interface_proxy;

汇编带来了一个毛病,说明没法声明变量 global_interface_proxy 是抽象类型 Interface_proxy 由于虚拟函数[system_atoms中列出的两个]是纯的".

我也没有真正精通C ++。我想我应当重新定义内涵两个虚拟函数纯净(没有 = 0virtual 对吗?)在某个地方,该变量不是抽象类型的。但是我的知识停在那里 - 多元继承使我感到困惑。

看答案

一个 纯虚拟功能 是虚拟且明确没有实现的函数(用尾声表示 = 0)。纯虚拟功能旨在强迫派生的类,以提供自己的该功能的实现。换句话说,预设派生的类终究将定义内涵其本身的行动。

一个抽象类是具有一个或多个纯虚拟函数的类,由于它最少声明一个或从一个抽象类中继承,并且不会覆盖所有继承的纯虚拟函数。由于未完全定义内涵它们的行动,因此没法实例化这些类(您没法创建它的实例)。它们只能用作其他类型的基类。

在您的情形下 system_atoms 定义内涵2个纯虚拟函数,因此这是一个抽象类。您列出的每一个类 system_atoms 也是抽象的,由于它们都从这些纯虚拟功能中继承了,并且永久不会覆盖它们。

正确的解决方案是经过覆盖为您派生类中的这些纯虚拟功能提供实现。

看到 虚拟功能 和 override 说明符。

多重继承在这里没有发挥作用,除每一个继承类可能都有自己的纯虚拟函数。只需正常覆盖纯虚拟功能便可


🚀🌟 点击注册 免费试用超级应用平台-英雄云企业级hpapaas 🌟🚀 😃👉🌐

免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

标签:C ++ 遗产
上一篇:复选框验证angularjs-英雄云拓展知识分享
下一篇:如何知道吉迪斯的消息被推开与否-英雄云拓展知识分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×