はじめに

継承関係にある2つのクラスにおいて、サブクラスのコンストラクタからスーパークラスのコンストラクタを明示的に指定して呼び出す方法について説明します。

このページはC++での実現方法について説明しています、Javaでの実現方法についてはこちらを、PHPでの実現方法についてはこちらをご参照ください。

サブクラスのコンストラクタ宣言

サブクラスのインスタンス生成時に利用するスーパークラスのコンストラクタを指定するには、サブクラスの各コンストラクタ宣言の後ろにスーパークラスのコンストラクタを下記のように指定して呼び出します。

サンプルコード
#include <stdio.h>

class Super
{
    public: Super()
    {
        puts("Super() が呼ばれました。");
    }

    public: Super(int aNumber)
    {
        puts("Super(int) が呼ばれました。");
    }

    public: virtual ~Super()
    {
        puts("~Super() が呼ばれました。");
    }
};

class Sub : public Super
{
    public: Sub() : Super()
    {
        puts("Sub() が呼ばれました。");
    }

    public: Sub(int aNumber) : Super(aNumber)
    {
        puts("Sub(int) が呼ばれました。");
    }

    public: ~Sub()
    {
        puts("~Sub() が呼ばれました。");
    }
};

void main()
{
    Super *tInstance;

    tInstance=new Sub();
    delete tInstance;

    tInstance=new Sub(10);
    delete tInstance;
}

このプログラムをコンパイル/実行した結果は、下記の通りです。

実行結果
Super() が呼ばれました。
Sub() が呼ばれました。
~Sub() が呼ばれました。
~Super() が呼ばれました。
Super(int) が呼ばれました。
Sub(int) が呼ばれました。
~Sub() が呼ばれました。
~Super() が呼ばれました。

サブクラスのコンストラクタ「Sub(int)」を利用してインスタンスを生成した際、スーパークラスのコンストラクタ「Super(int)」が正しく呼び出されていることがご理解いただけると思います。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まさにこれだ
7 (44%)
参考になった
7 (44%)
これじゃない
2 (13%)

表示できるメッセージはありません。