2015-09-28 120 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在你的代码。

相关问题