override
作用: 在子类中重写父类的虚函数,我们可以在子类的虚函数声明后加上override。
上图就在重写eat()的时候,加上override。
作用:
1. 可以提示读者,这个函数是重写自父类中的。
2. 加上override之后,我们在重写eat()的时候,如果我们函数的名称写错了,那就会报错。
上面eat()函数重写时,我们将名字写成了,evt();加上override之后我们写错编译器就会报错,如果没加,编译器会认为这是你在子类中新定义的函数,不会报错。(黄线表示只有声明没有实现)
但是我们的目的是重写虚函数eat()而不是新加函数evt()。 所以写错后面的使用过程中就会出现问题。
3. 良好的变成习惯,在重写时在声明上加上override(实现的时候不需要加) ,当然不加也正确。
final
功能:
1. 作用在类上: 加上final的类,表明这个类是无法被继承的。(不能有子类)
2. 作用在父类的虚函数上: 在上final的虚函数(非纯虚函数),表明这个虚函数不能在子类中被重写。
代码中在Animal类后加上final,这个类就不能被继承,如果继承就会报错。
同理: 如果对加上final的虚函数(非纯虚函数)进行重写就会报错。
注意:
不能在纯虚函数后面加final,因为没有意义,你加上子类不能实现它,那子类都是抽象类,对象都无法创建,就没有意义了。