2010-09-04 85 views
4

比方說,我有一個類A和一個類B. B用作A中的成員。B沒有默認的構造函數,而是一個需要參數的構造函數。C++調用非默認構造函數作爲成員

class B { 
    B(int i) {} 
}; 


class A { 

B m_B; 

A() 
{ 
    m_B(17); //this gives an error 
} 

}; 

我該如何使用B作爲A中的成員?

回答

13

使用初始化列表。

class B { 
    public: 
    B(int i) {} 
}; 

class A { 
    B m_B; 
    public: 
    A() : m_B(17) {} 
}; 

順便說一句,給構造的外部某處復位m_B,正確的語法是:

m_B = B(17); 
+0

在這個例子中,如果最後一行'M_B = B(17)'從稱爲' A()構造函數,B的默認構造函數仍然被調用?如果是這樣,有沒有辦法來防止這種情況? – 2011-03-22 05:43:38

+0

@Steven:(1)是的。 (2)使用初始化列表初始化'm_B'。 – kennytm 2011-03-22 05:46:25