継承関係にある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)」が正しく呼び出されていることがご理解いただけると思います。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。