gpt4 book ai didi

c++ - 无法将变量声明为抽象类型,因为虚函数是纯的 - 具有多重继承

转载 作者:行者123 更新时间:2023-11-27 22:44:28 25 4
gpt4 key购买 nike

我已经看到了针对此类问题的多个答案,但我不知道如何解决它。主要问题可能是我正在处理别人的代码,但是嗯。这是此问题的简化示例:我有一个链接许多其他类的类:

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;
}

我有一个应该继承自接口(interface)的类:

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 对吗?)这样变量就不是抽象类型了.但我的知识仅限于此 - 多重继承让我感到困惑。

最佳答案

A pure virtual function是一个虚拟的函数,它明确地没有实现(用尾随 = 0 表示)。纯虚函数旨在强制派生类为该函数提供自己的实现。换句话说,派生类最终会为该函数定义自己的行为。

抽象类是具有一个或多个纯虚函数的类,因为它至少声明了一个或者它继承自抽象类并且不会覆盖所有继承的纯虚函数。这些类无法实例化(您无法创建它的实例),因为它们的行为未完全定义。它们只能用作其他类型的基类。

在您的例子中,system_atoms 定义了 2 个纯虚函数,因此它是一个抽象类。您列出的每个继承自 system_atoms 的类也是抽象的,因为它们都继承自那些纯虚函数并且从不覆盖它们。

正确的解决方案是通过覆盖为派生类中的那些纯虚函数提供实现。

参见 virtual functionsoverride说明符。

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

关于c++ - 无法将变量声明为抽象类型,因为虚函数是纯的 - 具有多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44951765/

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