2017-10-16 13 views
0

多分、私はGoogleに私の質問をひどく尋ねていますが、私の問題に対する答えは見つかりません。私の問題は、継承したコンストラクタがデフォルトのベースコンストラクタを呼び出すため、なぜ私は実際にその理由が得られないということです。ここに私の単純化されたバージョンがあります。私の継承したコンストラクタがベースのデフォルトのコンストラクタを呼び出す理由

例:

A.cpp

#include <iostream> 
#include "A.h" 

using namespace std; 

A::A() 
{ 
    cout << "A" << endl; 
} 

B.cpp

#include <iostream> 
#include "B.h" 

using namespace std; 

B::B() 
{ 
    cout << "B" << endl; 
} 

B::B(int x) 
{ 
    cout << "B" << x << endl; 
} 

Source.cpp

#include <iostream> 
#include "A.h" 
#include "B.h" 

using namespace std; 

int main() { 
    B * b = new B(); 
    cout << "---" << endl; 
    B * b2 = new B(2); 

    system("PAUSE"); 
    return 0; 
} 

出力:

A 
B 
--- 
A 
B2 
Press any key to continue . . . 

私はちょうどBのコンストラクタが何を参照したいのですか?このように:

B 
--- 
B2 
Press any key to continue . . . 
+1

継承コンストラクタはありますか?また、 'B'型のオブジェクトを正常に構築するには、' A'のctorを呼び出す必要があります。 –

+6

[良いC++の本]を再訪するような音です(http://stackoverflow.com/questions/388242)。/the-definitive-c-book-guide-and-list)常に派生クラスの基本部分を構築する必要があります。 – NathanOliver

+1

あなたはあなたのクラスの定義を表示しておらず、あなたは 'B'が' A'から派生していることを明示していません。私は質問のタイトルと提供された出力から継承を推測できると思います。 –

答えて

1

親クラスは、サブクラスが後で依存するメンバ変数(潜在的にメモリを割り当てることを含む)を初期化する。

+2

コンストラクタは、現在のオブジェクトが初期化される場所にストレージを割り当てません。あなたが意味していたことは、メンバ変数を初期化することによってのみ要約されます。 – StoryTeller

関連する問題