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;

借助编译器检查该重写的方法是否重写了。

 

posted @   lypbendlf  阅读(753)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2018-10-25 1141 PAT Ranking of Institutions[难]
点击右上角即可分享
微信分享提示