2015-09-28 141 views
0

我有兩個類酒吧和Foo類的初始化 - 屬性沒有默認構造函數

class Bar 
{ 
    Foo attr;   
public:  
    Bar(int i); 
} 

class Foo 
{ 
    std::string _name;   
public:  
    Foo(std::string name) : _name(name){} 
} 

的問題是,Foo沒有默認構造函數,但只有一個構造函數一個std::string。此外operator=是Foo的私人會員。那麼我怎樣才能初始化attr,如果i==0"bad"其他的話,它的名字就是"good"

+3

我不明白這個問題。你顯然知道如何初始化成員,因爲你在'Foo'中這麼做了。什麼阻止你使用相同的技術在'Bar'中初始化'attr'? –

回答

4

使用構造函數初始化列表:

class Bar 
{ 
public: 
    Bar(int i) : attr(i == 0 ? "good" : "bad") {} 

private: 
    Foo attr; 
}; 

你或許應該也使Bar構造explicit使隨機整數不會意外解讀爲Bar在你的代碼。

相關問題