C++ Don';t重写派生类中的纯虚函数
在下面的示例中,类Base是一个抽象类。派生的类继承自基类。我不重写派生类中的纯虚函数。 然后,我一直在尝试创建派生类对象,但编译器给出了以下错误C++ Don';t重写派生类中的纯虚函数,c++,inheritance,virtual,C++,Inheritance,Virtual,在下面的示例中,类Base是一个抽象类。派生的类继承自基类。我不重写派生类中的纯虚函数。 然后,我一直在尝试创建派生类对象,但编译器给出了以下错误 error: cannot declare variable 'd' to be of abstract type 'Derived' Derived d; 此处代码: #include<iostream> using namespace std; class Base { public: virtual void
error: cannot declare variable 'd' to be of abstract type 'Derived'
Derived d;
此处代码:
#include<iostream>
using namespace std;
class Base
{
public:
virtual void show() = 0;
};
class Derived : public Base
{
};
int main(void)
{
Derived d;
return 0;
}
#包括
使用名称空间std;
阶级基础
{
公众:
虚拟void show()=0;
};
派生类:公共基
{
};
内部主(空)
{
导出d;
返回0;
}
为什么派生类也成为抽象类?是的,
派生的
是一个抽象类。这是因为在Base
类中有一个纯虚拟方法show
,它已被派生的
继承,但从未解析过。这意味着为了使Derived
成为一个具体的类,必须首先在Base
类本身或Derived
Yes中实现show
方法。纯虚函数必须在派生类中实现,否则它们仍然是抽象类:Yes。show
函数在您定义它之前是抽象的。为什么要投反对票?我觉得这个问题没有显示出对这个问题的任何研究或思考。派生的
怎么可能不是抽象的?i、 e.如果没有,当有人认为自己有一个Base
试图调用show()
时会发生什么?如果编译器允许的话,这没什么好的。@Stefan不是我的反对票,但你的问题是“派生类也变成抽象类了吗?”而编译器的错误消息是:“不能将变量“d”声明为抽象类型“派生的””在我看来似乎是编译器为你回答的。@Ron我认为显式编写返回0代码>是很好的风格;省略它是被允许的,因为太多的人都懒得打字,以至于委员会不得不努力使这样的代码格式良好,AFAICT。但是,是的,这不是惯用的编写空参数列表的方法。只是对术语的一个小小的质疑:派生的
在某种程度上不是一个抽象类;它只是一个抽象类,因为它有一个未被重写的纯虚函数。