2015-09-07 286 views
-2

我有一個類爲它創建一個構造函數「A」。然後我用一個構造函數「B」創建另一個類。我如何使用C++語言從不同類的構造函數調用構造函數「B」,即「A」?從不同類的構造函數調用構造函數

+4

'A :: A(){B(); 「從技術上講,這正是你所要求的,儘管我有強烈的感覺,這並不是你想要做的事情(所陳述的問題沒有多大意義)。 –

+0

你試圖達到什麼目的是絕對不清楚的。你是否試圖在A的構造函數中實例化B?你在A類中有一個B類成員字段嗎?在創建類實例(對象)時調用構造函數。你的實例在哪裏? –

回答

1

在C++成員或類的對象變量本身的字段中,它們的構造函數自動被編譯器調用,正好在類實例化的時候,也就是當它自己的構造函數被調用時。在C++中實例化對象的順序與此類似,基類構造函數get的先調用,然後是成員變量,然後是派生類,它是您的類。

2

如果A繼承自B那麼您可以從構造函數A中調用基類構造函數。在C++ 11中,你有更多的靈活性,你可以使用委託構造函數。否則,這個問題沒有多大意義。

構造函數是一種特殊的函數,只有在創建新對象時纔會調用該函數。除非你這樣做,否則你不能調用它,通常當你想創建一個新對象時調用構造函數 - 調用構造函數不是你的目標,得到新對象。

1

這將爲您的目的服務。

class A { 
    public: 
    A(){ 
//your code 
     } 
}; 



class B{ 
public : 
B():A(){ 
//your code 
} 
}; 
1

如果兩個類都不在父親子關係中,那麼你可以將類A組成B類。下面是一個例子。

class B{ 

public: 
    B(){ 
     cout<<"Class B constructor"<<endl; 
    } 
}; 

class A{ 
    B pbj; 
public: 
    A(){ 
     cout<<"Class A Constructor"<<endl; 
    } 
}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    A obj1; 

    return 0; 
}