override 说明符(C++11 起)

来自cppreference.com
< cpp‎ | language

指定一个虚函数覆盖另一个虚函数。

语法

如果使用标识符 override,那么它紧随成员函数声明或类定义内的成员函数定义语法中的声明符之后出现。

声明符 虚说明符序列(可选) 纯说明符(可选) (1)
声明符 虚说明符序列(可选) 函数体 (2)
1) 在成员函数声明中,override 可以在紧随声明符之后并在 纯说明符 之前(如有使用)的 虚说明符序列 中出现。
2) 在类定义内成员函数定义中,override 可以在紧随声明符之后并紧接 函数体 之前的 虚说明符序列 中出现。

两种情况中,如果使用 虚说明符序列 ,那么它必须是 overridefinalfinal overrideoverride final 之一。

解释

在成员函数的声明或定义中,override 说明符确保该函数为虚函数并覆盖某个基类中的虚函数。如果不是这样,那么程序为谬构(生成编译错误)。

override 是在成员函数声明符之后使用时拥有特殊含义的标识符:其他情况下它不是保留的关键词。

示例

struct A
{
    virtual void foo();
    void bar();
};
 
struct B : A
{
    void foo() const override; // 错误:B::foo 不覆盖 A::foo
                               // (签名不匹配)
    void foo() override; // OK:B::foo 覆盖 A::foo
    void bar() override; // 错误:A::bar 非虚
};

可能的输出:

main.cpp:9:10: 错误:'void B::foo() const' 标记为 'override',但没有覆盖
    9 |     void foo() const override; // 错误:B::foo 不覆盖 A::foo
      |          ^~~
main.cpp:12:10: 错误:'void B::bar()' 标记为 'override',但没有覆盖
   12 |     void bar() override; // Error: A::bar 非虚
      |          ^~~

参阅

final 说明符(C++11) 声明不能被覆盖的方法