2010-10-31 122 views
6

說我有一個基類:無法從派生類中調用基類的構造

class baseClass 
{ 
    public: 
baseClass() { }; 

}; 

而派生類:

class derClass : public baseClass 
    { 
     public: 
    derClass() { }; 

    }; 

當我創建的derClass實例的baseClass調用構造函數。我怎樣才能防止這一點?

+1

你沒有;這沒有意義。你爲什麼認爲你需要這樣做? – GManNickG 2010-10-31 21:05:46

+0

@GMan我有一個基類,在構造函數中使用頭部準備數據。派生類不需要準備好頭文件,但它調用正在準備頭文件的基類構造函數,並將其中的某些內容混淆。 – Brad 2010-10-31 21:10:15

+3

你錯過了繼承的點。繼承形成「一個是B」的關係。如果B做了A不應該做的事情,那麼A不是B. – 2010-10-31 21:17:00

回答

3

基類實例是任何派生類實例的組成部分。如果成功構建派生類實例,則必須 - 按定義 - 構造所有基類和成員對象,否則派生對象的構造將失敗。構造基類實例涉及調用其構造函數之一。

這是如何在C++中繼承的基礎。

11

製作額外的空ctor。

struct noprapere_tag {}; 

class baseClass 
{ 
public: 
    baseClass() : x (5), y(6) { }; 

    baseClass(noprapere_tag) { }; // nothing to do 

protected: 
    int x; 
    int y; 

}; 

class derClass : public baseClass 
{ 
public: 
    derClass() : baseClass (noprapere_tag) { }; 

}; 
相關問題