override的使用
多态行为的基础:基类声明了一个虚函数,派生类声明一个函数覆盖该函数。但覆盖时有要求,即函数签名必须一致(函数签名包括:函数名 参数列表 const)。
可能出现的问题:有时候我们写程序时可能会出现疏漏,本意是想写一个虚函数去覆盖基类的虚函数,但在写的时候可能参数表或者返回值或者其他地方没有把它定义的和基类虚函数的原型完全一致,这时编译器并不会报错,编译器不知道我们写这个函数目的是覆盖基类虚函数。那如何避免出现这种情况呢?
解决方法:C++11中引入显式覆盖,在程序的编译期而非运行期间捕获此错误。在虚函数显式重载中运用,编译器会检查基类中是否存在一虚函数,与派生类中带有声明override的虚函数,有相同的标签名。若不存在则会报错。
我们用override说明的函数必须要在基类中找到同样原型的虚函数