一道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;
} 展开
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;
} 展开
展开全部
看到了几处错误
B中的虚函数f2和f3被final修饰,因此不能在其子类D中重写。
D中的f3还有一个错误是override关键字运用错误。override关键字必须是重写基类中声明为虚拟的 (virtual)成员函数。因此可以将B中的f3前面加一个virtual关键字修饰,或者在D中去f3后面的override关键字
D中的g1也是多余了override的关键字。因为在B中根本不存在的g1,当然也就无所谓重写的说法了。
B中的f函数为一个纯虚函数,如果其子类D不实现该函数,其子类也是一个虚类,不能被实例化的。因此可以在子类D中实现函数f。
B中不存在无参的构造方法
追问
第五个是什么意思啊
追答
在B的子类中的D,没有声明自己的构造函数,因此它会默认调用父类的无参构造方法。B中只有一个构造方法,即B(int a),这个构造方法需要一个参数作为输入,没有无参构造方法。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询