类初始化 - 属性没有默认构造函数

时间:2015-09-28 10:19:15

标签: c++ constructor initialization copy-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,以便其名称"good"如果i==0"bad"则为{。}}。

1 个答案:

答案 0 :(得分:4)

使用构造函数初始化列表:

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

private:
    Foo attr;
};

您可能还应该创建Bar构造函数explicit,以便随机整数不会在代码中被意外解释为Bar