上QQ阅读APP看书,第一时间看更新
5.8 显式虚函数重载
override可以确保在重写父类的虚函数,调整父类虚函数时(改名字或参数),不会忘记调整子类的虚函数。在编译时,编译器会为标记为override的虚函数检查其父类是否有该虚函数。代码如下:
class A { public: virtual void virtualFun(int); } class B : public A { public: virtual void virtualFun(int) override; //显式重写了该函数 virtual void virtualFun(float) override; //父类并无该虚函数,错误 }
final可以确保子类不能重写函数,或有相同签名的函数,或类不能被继承。代码如下:
class A final { } //继承失败,因为A已经被声明为final class B : A { } class A { virtual void fun() final; } class B : public A { //失败,因为父类已经声明fun为final void fun(); }
override和final并不是关键字,只有在上面特定的位置才有特殊含义,在其他地方仍可当变量来使用。为了保持向后兼容,override是选择性的。