C++ override关键字
转自:https://blog.csdn.net/fanyun_01/article/details/79122136
1.介绍
在派生类中,重写 (override) 继承自基类成员函数的实现 (implementation) 时,要满足如下条件:
- 一虚:基类中,成员函数声明为虚拟的 (virtual)
- 二容:基类和派生类中,成员函数的返回类型和异常规格 (exception specification) 必须兼容
- 四同:基类和派生类中,成员函数名、形参类型、常量属性 (constness) 和 引用限定符 (reference qualifier) 必须完全相同
如此多的限制条件,导致了虚函数重写如上述代码,极容易因为一个不小心而出错。C++11 中的 override 关键字,可以显式的在派生类中声明,哪些成员函数需要被重写,如果没被重写,则编译器会报错。
#include <iostream> using namespace std; class Base { public: virtual void fun1() const; virtual void fun2(int x); virtual void fun3() &; void fun4() const; // is not declared virtual in Base }; class Derived: public Base { public: virtual void fun1() override; virtual void fun2(unsigned int x) override; virtual void fun3() && override; virtual void fun4() const override; };
编译时会报错:
error: ‘virtual void Derived::fun1()’ marked ‘override’, but does not override virtual void fun1() override;
借助编译器检查该重写的方法是否重写了。