オブジェクトを作成するときにサブクラスは、親クラスのコンストラクタを呼び出します。
1の#include <iostreamの> 2 使用して 名前空間STDを、 3 クラスベース 4 { 5 公共: 6 ベース():m_num(0 ){ 7 COUT << " これはベース()である" << ENDL。 8 } 9 ベース(INT ヴァル):m_num(ヴァル){ 10 COUT << " これはベース(int型val)である" << ENDL。 11 } 12 プライベート: 13 INTm_num; 14 }。 15 16 クラス BaseChild:公共ベース 17 { 18 公共: 19 BaseChild(){ 20 COUT << " これはBaseChild()である" << ENDL。 21 } 22 BaseChild(INT ヴァル):ベース(ヴァル){ 23 COUTは<< " これはBaseChild(val)である" << ENDL。 24 } 25 }。 26 27 int型のmain(int型ARGCであり、CHAR * ARGVを[])である 28と { 29と BaseChild child1の。 、30、 BaseChild child2の(5得ます)。 31、 リターン 0 ; 32 }
親クラスのコンストラクタを継承することはできません、それはサブクラスのコンストラクタの初期化リストで参照されている必要があり、そうでない場合は、親クラスのデフォルトコンストラクタを呼び出します。
コンストラクタは、デフォルトのパラメータがあります。
1の#include <iostreamの> 2 使用して 名前空間STDを、 3 クラスベース 4 { 5 公共: 6 ベース(INT ヴァル):m_num(ヴァル){ 7 COUT << " これはベース(int型val)である" << ENDL。 8 } 9 プライベート: 10 のint m_num。 11 }。 12 13 クラス BaseChild:パブリックベース 14 { 15 公共。 16 BaseChild(INTヴァル= 14 ):ベース(ヴァル){ 17 COUT << " これはBaseChild(val)である" << ENDL。 18 } 19 }。 20 21 INTメイン(int型 ARGC、CHAR * ARGV []) 22 { 23 BaseChild child1の。 24 リターン 0 ; 25 }
サブクラスのコンストラクタは、デフォルトのパラメータは、親クラスので、与えられない場合、サブクラスは、何のパラメータはコンストラクタを定義されていないされていないことに注意してください。そしてもし親クラス、サブクラスプラスコンストラクタ引数なしの意志それは曖昧さの問題を生じさせるため、エラーは、コンパイラは、ユーザーは、コンストラクタ呼び出しを望んでいるか知っていません
参考:
C ++コンストラクタは、クラスオブジェクトを初期化します
https://blog.csdn.net/weixin_43891901/article/details/89227108
C ++コンストラクタ初期化サブクラス
https://www.cnblogs.com/clovershell/p/10246629.html
C ++曖昧さの問題