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;
借助编译器检查该重写的方法是否重写了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2018-10-25 1141 PAT Ranking of Institutions[难]