类的初始化 - 属性没有默认构造函数
问题描述:
我有两个类酒吧和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"
。
答
使用构造函数初始化列表:
class Bar
{
public:
Bar(int i) : attr(i == 0 ? "good" : "bad") {}
private:
Foo attr;
};
你或许应该也使Bar
构造explicit
使随机整数不会意外解读为Bar
在你的代码。
我不明白这个问题。你显然知道如何初始化成员,因为你在'Foo'中这么做了。什么阻止你使用相同的技术在'Bar'中初始化'attr'? –