命名空间
变体
操作

override 标识符 (自 C++11 起)

来自 cppreference.cn
< cpp‎ | language
 
 
C++ 语言
通用主题
流程控制
条件执行语句
if
迭代语句 (循环)
for
范围 for (C++11)
跳转语句
函数
函数声明
Lambda 函数表达式
inline 标识符
动态异常规范 (在 C++11 中已弃用*)
noexcept 标识符 (C++11)
异常
命名空间
类型
说明符
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
存储期说明符
初始化
 
 

指定一个虚函数重写另一个虚函数。

目录

[编辑] 语法

标识符 override,如果使用,会立即出现在成员函数声明或类定义内部的成员函数定义的语法中的声明符之后。

声明符 virt-specifier-seq(可选) 纯虚函数说明符(可选) (1)
声明符 virt-specifier-seq(可选) 函数体 (2)
1) 在成员函数声明中,override 可以出现在 virt-specifier-seq 中,紧跟在声明符之后,以及在 纯虚函数说明符(如果使用)之前。
2) 在类定义内部的成员函数定义中,override 可以出现在 virt-specifier-seq 中,紧跟在声明符之后,以及在 函数体 之前。

在这两种情况下,virt-specifier-seq(如果使用)可以是 overridefinal,或 final overrideoverride final

[编辑] 解释

在成员函数声明或定义中,override 标识符确保该函数是虚函数,并且正在重写基类中的虚函数。如果情况并非如此,则程序是非良构的(会生成编译时错误)。

override 是一个具有特殊含义的标识符,当在成员函数声明符之后使用时;否则它不是保留关键字

[编辑] 关键字

override

[编辑] 示例

#include <iostream>
 
struct A
{
    virtual void foo();
    void bar();
    virtual ~A();
};
 
// member functions definitions of struct A:
void A::foo() { std::cout << "A::foo();\n"; }
A::~A() { std::cout << "A::~A();\n"; }
 
struct B : A
{
//  void foo() const override; // Error: B::foo does not override A::foo
                               // (signature mismatch)
    void foo() override; // OK: B::foo overrides A::foo
//  void bar() override; // Error: A::bar is not virtual
    ~B() override; // OK: `override` can also be applied to virtual
                   // special member functions, e.g. destructors
    void override(); // OK, member function name, not a reserved keyword
};
 
// member functions definitions of struct B:
void B::foo() { std::cout << "B::foo();\n"; }
B::~B() { std::cout << "B::~B();\n"; }
void B::override() { std::cout << "B::override();\n"; }
 
int main()
{
    B b;
    b.foo();
    b.override(); // OK, invokes the member function `override()`
    int override{42}; // OK, defines an integer variable
    std::cout << "override: " << override << '\n';
}

输出

B::foo();
B::override();
override: 42
B::~B();
A::~A();

[编辑] 参见

final 标识符 (C++11) 声明一个方法不能被重写或一个类不能被继承[编辑]