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 @ 2022-10-25 23:19  lypbendlf  阅读(722)  评论(0编辑  收藏  举报