名前空間
変種
操作

override 指定子 (C++11 以降)

From cppreference.com
< cpp‎ | language
 
 
C++言語
全般
フロー制御
条件実行文
if
繰り返し文 (ループ)
for
範囲for (C++11)
ジャンプ文
関数
関数宣言
ラムダ式
inline指定子
動的例外仕様 (C++17まで*)
noexcept指定子 (C++11)
例外
名前空間
指定子
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点数
文字 - 文字列 - nullptr (C++11)
ユーザー定義 (C++11)
ユーティリティ
属性 (C++11)
typedef宣言
型エイリアス宣言 (C++11)
キャスト
メモリ確保
クラス
クラス固有の関数プロパティ
仮想関数
override 指定子 (C++11)  
final指定子 (C++11)
explicit (C++11)
static

特殊メンバ関数
テンプレート
その他
 
 

仮想関数が別の仮想関数をオーバーライドすることを指定します。

目次

[編集] 構文

識別子overrideは、使用される場合、メンバ関数の宣言またはクラス定義内のメンバ関数の定義の構文において、宣言子の直後に置かれます。

宣言子 virt-specifier-seq (省略可能) 純粋指定子 (省略可能) (1)
宣言子 virt-specifier-seq (省略可能) 関数本体 (2)
1) メンバ関数の宣言では、overridevirt-specifier-seqに、宣言子の直後、使用される場合は純粋指定子の前に置くことができます。
2) クラス定義内のメンバ関数の定義では、overridevirt-specifier-seqに、宣言子の直後、関数本体の直前に置くことができます。

どちらの場合も、virt-specifier-seqは、使用される場合、overrideまたはfinal、またはfinal overrideまたはoverride 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 日本語 中文(简体) 中文(繁體)