一道c++改错题 5

指出下面程序段中的错误。classB{public:B(inta){cout<<a<<endl;}virtualvoidf()=0;virtualvoidf1(inta)... 指出下面程序段中的错误。
class B {
public:
B(int a){cout<<a<<endl;}
virtual void f()=0;
virtual void f1(int a){cout<<a;};
virtual void f2(int a)final{cout<<a;};
void f3(int c)final{cout<<c;}
void f4(int b){cout<<b;}
};
class D : public B {
public:
void f1(int b)override{cout<<b;}
void f2(int b)override{cout<<b;}
void f3(int b)override{cout<<b;}
void g1(int b)override{cout<<b;}
};
void main(){
D d1;
}
展开
 我来答
duanggi
2019-05-27 · TA获得超过196个赞
知道小有建树答主
回答量:240
采纳率:87%
帮助的人:145万
展开全部

看到了几处错误

  1. B中的虚函数f2和f3被final修饰,因此不能在其子类D中重写。

  2. D中的f3还有一个错误是override关键字运用错误。override关键字必须是重写基类中声明为虚拟的 (virtual)成员函数。因此可以将B中的f3前面加一个virtual关键字修饰,或者在D中去f3后面的override关键字

  3. D中的g1也是多余了override的关键字。因为在B中根本不存在的g1,当然也就无所谓重写的说法了。

  4. B中的f函数为一个纯虚函数,如果其子类D不实现该函数,其子类也是一个虚类,不能被实例化的。因此可以在子类D中实现函数f。

  5. B中不存在无参的构造方法

追问
第五个是什么意思啊
追答
在B的子类中的D,没有声明自己的构造函数,因此它会默认调用父类的无参构造方法。B中只有一个构造方法,即B(int a),这个构造方法需要一个参数作为输入,没有无参构造方法。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式