Class 初始化 - 属性没有默认构造函数
Class initialization - attribute has no default constructor
我有两个 类 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
使其名称在 i==0
时为 "good"
否则为 "bad"
。
使用构造函数初始化列表:
class Bar
{
public:
Bar(int i) : attr(i == 0 ? "good" : "bad") {}
private:
Foo attr;
};
您可能还应该制作 Bar
构造函数 explicit
,这样随机整数就不会在您的代码中意外地被解释为 Bar
s。
我有两个 类 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
使其名称在 i==0
时为 "good"
否则为 "bad"
。
使用构造函数初始化列表:
class Bar
{
public:
Bar(int i) : attr(i == 0 ? "good" : "bad") {}
private:
Foo attr;
};
您可能还应该制作 Bar
构造函数 explicit
,这样随机整数就不会在您的代码中意外地被解释为 Bar
s。