Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Don';t重写派生类中的纯虚函数_C++_Inheritance_Virtual - Fatal编程技术网

C++ Don';t重写派生类中的纯虚函数

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

在下面的示例中,类Base是一个抽象类。派生的类继承自类。我不重写派生类中的纯虚函数。 然后,我一直在尝试创建派生类对象,但编译器给出了以下错误

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。但是,是的,这不是惯用的编写空参数列表的方法。只是对术语的一个小小的质疑:
派生的
在某种程度上不是一个抽象类;它只是一个抽象类,因为它有一个未被重写的纯虚函数。