gpt4 book ai didi

c++ - 在另一个(来自抽象父级)父级中定义抽象方法?

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:07 24 4
gpt4 key购买 nike

我希望在我的代码中,C++ 会注意到在类 D 中类 C 的抽象方法已经在类 A 中定义。但事实并非如此。类似的代码可以在 Java 中运行(其中 C 充当接口(interface))。目前它失败并输出:

error: cannot declare variable ‘x’ to be of abstract type ‘D’
note: because the following virtual functions are pure within ‘D’:
note: virtual void C::secret()

让它发挥作用的最佳方法是什么?

#include <iostream>

class A {
public:
virtual void secret() {
std::cout<<"secret a func\n";
};
};

class B: public A {};

class C {
public:
virtual void secret() = 0;
};

class D: public B, public C {};

int main() {
D x;
return 0;
}

最佳答案

您的层次结构如下所示:

enter image description here

A 有一个名为secret 的虚成员函数。 C 有一个名为secret完全不相关 纯虚成员函数。由于 D 不提供覆盖 C::secret,因此 D 也被视为抽象类。 A::secret 存在并不重要 - A 不继承自 C 并且只有基类可以提供虚拟覆盖。

如果你想使用 A::secret 覆盖 C::secret,你必须明确地这样做:

class D: public B, public C {
void secret() override {
A::secret();
}
};

关于c++ - 在另一个(来自抽象父级)父级中定义抽象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231312/

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