我有两个班Bar和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
,以便其名称"good"
如果i==0
和"bad"
则为{。}}。
答案 0 :(得分:4)
使用构造函数初始化列表:
class Bar
{
public:
Bar(int i) : attr(i == 0 ? "good" : "bad") {}
private:
Foo attr;
};
您可能还应该创建Bar
构造函数explicit
,以便随机整数不会在代码中被意外解释为Bar
。