gpt4 book ai didi

c++ - 如何防止派生类成为 C++ 中的抽象类?

转载 作者:行者123 更新时间:2023-12-01 15:05:25 25 4
gpt4 key购买 nike

我有一个关于多态性的问题。以下示例将导致错误 “不能将变量‘obj’声明为抽象类型‘B’”

我知道问题在于函数 A::foo() 的纯虚方法,它使 A 成为抽象类。此外,A 类固有的 B 类。如果我没有在 B 的主体中实现 foo() 方法,那是否也一定会使 B 成为抽象?并因此导致错误?但这其中的逻辑是什么?我的基类 A 可能还有很多其他派生类,函数 foo 可能适用于某些派生类,但对 B 类可能完全没用。当然我可以声明一个空函数 B::foo() 绝对什么都不做,让代码运行。但是,有没有更好的解决方案或解释这种行为?谢谢!

struct A
{
A() : x(0) {}
virtual int foo() const = 0; // if I remove this line, code will run with no problem.
int x;
};

struct B : A {};

int main()
{
B obj;
cout << obj.x << endl;

return 0;
}

最佳答案

一开始你是对的,没有实现fooA使A抽象的,未实现 fooB也使那一个抽象。

多态性的全部意义在于您为一组类提供了一个公共(public)接口(interface)。任何派生类型通常都可以作为基本类型,具体行为只会在细节上有所不同(例如,像汽车、自行车或轮船的转向,机制不同,但你可以控制所有这些)。

如果调用 foo 没有意义在 B ,然后先问“为什么?”!不知何故,B不可能是真的A然后,就像 Screwdriver 不能是锤子(但两者都可以是工具)。

如果你发现自己遇到这样的麻烦,那么你的设计很可能有缺陷。

关于c++ - 如何防止派生类成为 C++ 中的抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58910978/

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