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(); }; // 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) |
宣告一個方法不能被覆蓋或一個類不能被繼承 |