●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

C++のオーバーライド(Override)とは?継承と仮想関数の正しい使い方

C++のクラス設計において、継承を使うと親クラスの関数を子クラスで書き換えることができます。 この機能をオーバーライド(Override)と呼びます。

この記事では、C++のオーバーライドの基本的な仕組みと使い方、オーバーロードとの違いや注意点について初心者向けにやさしく解説します。

オーバーライドとは?

オーバーライド(Override)とは、親クラスで定義された仮想関数を、子クラスで同じ名前・同じ引数で再定義することです。 オーバーライドすることで、子クラス独自の動作を上書きして実行できます。

オーバーライドの基本構文

class 親クラス {
public:
    virtual void 関数名();
};

class 子クラス : public 親クラス {
public:
    void 関数名() override;
};

オーバーライドする関数には、C++11以降では override キーワードを明記するのが推奨されます。 これにより、オーバーライドが正しく行われているかコンパイラがチェックしてくれます。

オーバーライドの例

#include <iostream>
using namespace std;

// 親クラス
class Animal {
public:
    virtual void speak() {
        cout << "動物が鳴いています。" << endl;
    }
};

// 子クラス(オーバーライド)
class Dog : public Animal {
public:
    void speak() override {
        cout << "ワンワン!" << endl;
    }
};

int main() {
    Animal* animal = new Dog();
    animal->speak();  // ワンワン!(子クラスの関数が呼ばれる)

    delete animal;
    return 0;
}

この例では、Animal クラスの仮想関数 speak()Dog クラスがオーバーライドしています。 親クラスのポインタを使っても、実際には子クラスの関数が呼ばれるのがポイントです。

オーバーロードとの違い

項目オーバーロードオーバーライド
意味同じ関数名で引数が違う親クラスの関数を子クラスで再定義
関係同じクラス内で複数定義親子クラス間で再定義
キーワードなしvirtual, override

オーバーライドのメリット

  1. 柔軟な拡張が可能
    親クラスを変更せずに、子クラスで新しい動作を定義できます。
  2. 多態性を実現
    ポリモーフィズムにより、親型ポインタで子の動作を呼び出せます。
  3. 統一的なインターフェース
    関数名を統一できるのでコードがシンプルになります。

注意点

  • 親クラス側の関数は virtual を付ける必要があります。
  • 子クラスでオーバーライドする際は、C++11以降では override を使うと安全です。
  • 関数のシグネチャ(引数の型と数)が完全に一致していないとオーバーライドになりません。

まとめ

C++のオーバーライドは、仮想関数を使って親クラスの処理を子クラスで上書きする仕組みです。 継承と組み合わせることで、柔軟で拡張性のあるプログラムを実現できます。

オーバーロードとの違いをしっかり理解し、virtualoverrideの正しい使い方を覚えておくことが、オブジェクト指向を深く理解する第一歩です。