override 说明符 (C++11 起)
来自cppreference.com
指定一个虚函数覆盖另一个虚函数。
语法
如果使用标识符 override,那么它紧随成员函数声明或类定义内的成员函数定义语法中的声明符之后出现。
| 声明符 虚说明符序列 (可选) 纯说明符 (可选) | (1) | ||||||||
| 声明符 虚说明符序列 (可选) 函数体 | (2) | ||||||||
2) 在类定义内成员函数定义中,
override 可以在紧随声明符之后并紧接函数体 之前的虚说明符序列 中出现。两种情况中,如果使用虚说明符序列,那么它必须是 override、final、final override 或 override final 之一。
解释
在成员函数的声明或定义中,override 说明符确保该函数为虚函数并覆盖某个基类中的虚函数。如果不是这样,那么程序非良构。
override 是在成员函数声明符之后使用时拥有特殊含义的标识符;其他情况下它不是保留的关键词。
关键词
示例
运行此代码
#include <iostream>
struct A
{
virtual void foo();
void bar();
virtual ~A();
};
// struct A 的成员函数定义:
void A::foo() { std::cout << "A::foo();\n"; }
A::~A() { std::cout << "A::~A();\n"; }
struct B : A
{
// void foo() const override; // 错误:B::foo 并不覆盖 A::foo
// (签名不匹配)
void foo() override; // OK: B::foo 覆盖 A::foo
// void bar() override; // 错误:A::bar 不是虚函数
~B() override; // OK: `override` 也能用于如析构函数这样的虚特殊成员函数
void override(); // OK,成员函数名,并非保留关键词
};
// 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,调用成员函数 `override()`
int override{42}; // OK,定义整数变量
std::cout << "override: " << override << '\n';
}
输出:
B::foo();
B::override();
override: 42
B::~B();
A::~A();
参阅
final specifier (C++11)
|
声明方法不能被覆盖,或类不能被派生 |