C ++ - サブクラスのパラメータは、デフォルトコンストラクタを持っています

オブジェクトを作成するときにサブクラスは、親クラスのコンストラクタを呼び出します。

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 ++曖昧さの問題

https://www.cnblogs.com/heimianshusheng/p/4836282.html

おすすめ

転載: www.cnblogs.com/cxc1357/p/11908225.html