指定一个虚函数覆盖另一个虚函数。
语法
若使用标识符 override
,则其紧随成员函数声明或类定义内的成员函数定义语法中的声明符之后出现。
声明符 虚说明符序列(可选) 纯说明符(可选) | (1) | ||||||||
声明符 虚说明符序列(可选) 函数体 | (2) | ||||||||
1) 在成员函数声明中,override
可在紧随声明符之后并在 纯说明符 之前(若使用)的虚说明符序列 中出现。
2) 在类定义内成员函数定义中,override
可在紧随声明符之后并紧接 函数体 之前的 虚说明符序列 中出现。
两种情况中,若使用 虚说明符序列 ,则它必须是 override
、final、final override
或 override 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 非虚
};