override 说明符 (C++11 起)

從 cppreference.com
< cpp‎ | language


 
 
C++ 語言
 
 

指定一個虛函數覆蓋另一個虛函數。

目錄

[編輯] 語法

如果使用標識符 override,那麼它緊隨成員函數聲明或類定義內的成員函數定義語法中的聲明符之後出現。

聲明符 虛說明符序列 (可選) 純說明符 (可選) (1)
聲明符 虛說明符序列 (可選) 函數體 (2)
1) 在成員函數聲明中,override 可以在緊隨聲明符之後並在純說明符 之前(如有使用)的虛說明符序列 中出現。
2) 在類定義內成員函數定義中,override 可以在緊隨聲明符之後並緊接函數體 之前的虛說明符序列 中出現。

兩種情況中,如果使用虛說明符序列,那麼它必須是 overridefinalfinal overrideoverride final 之一。

[編輯] 解釋

在成員函數的聲明或定義中,override 說明符確保該函數為虛函數並覆蓋某個基類中的虛函數。如果不是這樣,那麼程序非良構。

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 說明符 (C++11) 聲明方法不能被覆蓋,或類不能被派生[編輯]