override 說明符 (C++11 起)
出自 cppreference.com
指定一個 虛擬函式 覆寫(override)另一個虛擬函式。
目錄 |
[編輯] 語法
識別碼 override 若有使用,會出現在類別定義內的成員函式宣告或定義的語法中,緊接於 宣告子 (declarator) 之後。
| 宣告子 虛擬說明符序列 (選用) 純說明符 (選用) | (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) |
宣告方法無法被覆寫,或宣告類別無法被繼承 |