c++新特性override和final

override

作用:  在子类中重写父类的虚函数,我们可以在子类的虚函数声明后加上override。 

 c++新特性override和final_第1张图片

上图就在重写eat()的时候,加上override。 

作用:    

1.  可以提示读者,这个函数是重写自父类中的。 

2.   加上override之后,我们在重写eat()的时候,如果我们函数的名称写错了,那就会报错。

c++新特性override和final_第2张图片 

c++新特性override和final_第3张图片 

上面eat()函数重写时,我们将名字写成了,evt();加上override之后我们写错编译器就会报错,如果没加,编译器会认为这是你在子类中新定义的函数,不会报错。(黄线表示只有声明没有实现) 

但是我们的目的是重写虚函数eat()而不是新加函数evt()。 所以写错后面的使用过程中就会出现问题。 

3.  良好的变成习惯,在重写时在声明上加上override(实现的时候不需要加) ,当然不加也正确。

 

final 

功能:  

1. 作用在类上:  加上final的类,表明这个类是无法被继承的。(不能有子类)

2.  作用在父类的虚函数上:  在上final的虚函数(非纯虚函数),表明这个虚函数不能在子类中被重写。 

c++新特性override和final_第4张图片 

代码中在Animal类后加上final,这个类就不能被继承,如果继承就会报错。 

 

c++新特性override和final_第5张图片 

同理:  如果对加上final的虚函数(非纯虚函数)进行重写就会报错。 

 

注意:    

不能在纯虚函数后面加final,因为没有意义,你加上子类不能实现它,那子类都是抽象类,对象都无法创建,就没有意义了。 

 

你可能感兴趣的:(开发语言,c++)