名前空間
変種
操作

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

提供: cppreference.com
< cpp‎ | language
 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (C++20未満)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
仮想関数
override 指定子 (C++11)
final 指定子 (C++11)
特別なメンバ関数
テンプレート
その他
 
 

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

目次

[編集] 構文

識別子 override は、もし使用された場合は、メンバ関数の宣言またはクラス定義の内部のメンバ関数の定義の構文の宣言子の直後に現れます。

declarator virt-specifier-seq(オプション) pure-specifier(オプション) (1)
declarator virt-specifier-seq(オプション) function-body (2)
1) メンバ関数の宣言では、 override は、使用された場合は、宣言子の直後かつ純粋指定子の前の virt-specifier-seq に現れることができます。
2) クラス定義の内部のメンバ関数の定義では、 override は、宣言子の直後かつ function-body の直前の virt-specifier-seq に現れることができます。

どちらの場合でも、 virt-specifier-seq は、使用された場合は、 override または final または final override または override final のいずれかです。

[編集] 説明

メンバ関数の宣言または定義において、 override は、その関数が仮想であり、基底クラスの仮想関数をオーバーライドしていることを保証します。 これが真でなければ、プログラムは ill-formed です (コンパイル時エラーが生成されます)。

override はメンバ関数の宣言子の後で使用されたときに特別な意味を持つ識別子です。 それ以外では予約されたキーワードではありません。

[編集]

struct A
{
    virtual void foo();
    void bar();
};
 
struct B : A
{
    void foo() const override; // エラー、 B::foo は A::foo をオーバーライドしていません。
                               // (シグネチャの不一致)
    void foo() override; // OK、 B::foo は A::foo をオーバーライドしています。
    void bar() override; // エラー、 A::bar は仮想関数ではありません。
};


[編集] 関連項目