override
说明符 (C++11 起)
来自 cppreference.cn
指定一个虚函数覆盖另一个虚函数。
目录 |
[编辑] 语法
标识符 override
,如果使用,出现在类定义内的成员函数声明或成员函数定义的语法中,紧随声明符之后。
声明符 虚函数说明符序列 (可选) 纯说明符 (可选) | (1) | ||||||||
声明符 虚函数说明符序列 (可选) 函数体 | (2) | ||||||||
2) 在类定义内的成员函数定义中,
override
可以出现在虚函数说明符序列中,紧随声明符之后,且刚好在函数体之前。在这两种情况下,如果使用虚函数说明符序列,它要么是 override
或 final
,要么是 final override 或 override final。
[编辑] 解释
在成员函数声明或定义中,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) |
声明一个方法不能被覆盖或一个类不能被继承 |