2017-10-16 83 views
0

也許我只是非常問我的問題給谷歌,但我沒有找到我的問題的答案。我的麻煩是,我的繼承構造函數調用我的默認基礎構造函數,我真的不明白爲什麼。這是我的簡化版本。爲什麼我的繼承構造函數調用我的基礎默認構造函數

實施例:

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

相關問題