命名空間
變體
動作

override 說明符 (C++11 起)

出自 cppreference.com
< cpp‎ | language
 
 
C++ 語言
一般主題
流程控制
條件執行陳述式
if
疊代陳述式 (迴圈)
for
範圍 for (C++11)
跳躍陳述式
函式
函式宣告
Lambda 函式運算式
inline 指定符
動態例外規範 (直到 C++17*)
noexcept 指定符 (C++11)
例外
命名空間
型別
指定符
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
儲存期指定符
初始化
 
 

指定一個 虛擬函式 覆寫(override)另一個虛擬函式。

目錄

[編輯] 語法

識別碼 override 若有使用,會出現在類別定義內的成員函式宣告或定義的語法中,緊接於 宣告子 (declarator) 之後。

宣告子 虛擬說明符序列 (選用) 純說明符 (選用) (1)
宣告子 虛擬說明符序列 (選用) 函式主體 (2)
1) 在成員函式宣告中,override 可出現在緊接宣告子之後的虛擬說明符序列中,若有使用純說明符 (pure-specifier),則需置於其之前。
2) 在類別定義內的成員函式定義中,override 可出現在緊接宣告子之後且位於函式主體之前的虛擬說明符序列中。

在這兩種情況下,虛擬說明符序列若有使用,則為 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) 宣告方法無法被覆寫,或宣告類別無法被繼承[編輯]
English Deutsch 日本語 한국어 中文(简体) 中文(繁體)