派生クラスには基本クラスが含まれるため、派生クラスを作成すると、システムは最初に基本クラスを作成します。派生クラスは基本クラスのすべてのメンバーを吸収しますが、後述するコンストラクターとデストラクターは含まないことに注意してください。これは、派生クラスを作成するときに、独自のコンストラクターを呼び出す前に、最初に基本クラスを呼び出すことを意味します。 .コンストラクター。
ここでは、コードを通じてこれを確認できます。
#include<iostream>usingnamespacestd;classClock{private:intH;intM;intS;public:Clock(){cout<<Clock'sConstructorCalled!<<endl;}};classAlarmClock:publicClock{private:intAH;intAM;public:AlarmClock (){cout<<AlarmClock'sConstructorCalled!<<endl;}};intmain(){AlarmClockA;return0;}
実行中のスクリーンショットは次のとおりです。
派生クラス オブジェクトが 1 つだけ定義されており、派生クラスと基本クラスのコンストラクターが自動的に呼び出されることがわかります。呼び出し順序は、最初に基本クラスのコンストラクターを呼び出し、次に派生クラスのコンストラクターを呼び出します。
上記で説明したのは、最も一般的で最も単純な呼び出しメソッドです。これは暗黙的なものであり、書き出すことなく自動的に呼び出されます。では、基本クラスのコンストラクターがパラメーターを受け取るときにそれを呼び出すにはどうすればよいでしょうか?これで大丈夫でしょうか?パラメータを渡すにはどうすればよいですか?
回答: 次に、コンパイラーに明示的に指示する必要があります。つまり、それを明確に書き出して、渡すパラメーターを指定する必要があります。
一般的な記述形式は次のとおりです。
派生クラスコンストラクタ名(全パラメータリスト列):基底クラスコンストラクタ(実パラメータリスト列)
コード例:
#include<iostream>usingnamespacestd;classClock{private:intH;intM;intS;public:Clock(){cout<<Clock'sConstructorCalled!<<endl;}Clock(inth,intm,ints){this->H=h ;this->M=m;this->S=s;cout<<Clock'sConstructorwithparameterCalled!<<endl;}};classAlarmClock:publicClock{private:intAH;intAM;public:AlarmClock(){cout<<AlarmClock' sConstructorCalled!<<endl;}AlarmClock(inth,intm,ints):Clock(h,m,s){cout<<AlarmClock'sConstructorwithparameterCalled!<<endl;}};intmain(){AlarmClockA(8,10,30 );アラームクロックB;return0;}
その後、派生クラスのコンストラクターにコロンと基底クラスのパラメーターが渡され、基底クラスのパラメーターが明示的なパラメーター呼び出しを実現するための実際のパラメーターになることに注意してください。ぜひパソコンで練習してください!
基本クラスにパラメーターを持つコンストラクターが存在する場合、基本クラスでのパラメーターの転送を実現し、初期化作業を完了するには、派生クラスに明示的なパラメーターを渡す派生クラス コンストラクターが必要になることに注意してください。