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

标签 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 的私有(private)成员。那么我该如何初始化 attr这样它的名字就是"good"如果i==0"bad"否则。

最佳答案

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

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

private:
    Foo attr;
};

您可能还应该使 Bar 构造函数显式,这样随机整数就不会在您的代码中意外地被解释为 Bar

关于c++ - 类初始化 - 属性没有默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32820627/

相关文章:

c++ - 'std::cout' 声明中的明确资格

c++ - 将 glbinding 与 cmake 链接起来

c++ - 移动物理引擎

ios - 我如何确保所有基元在我的 iOS 应用程序中至少被 null 初始化?

c++ - 奇怪的 C++ 新运算符用法

c++ - 稍后在 `: , ` 中使用在构造函数的 `: , ` 部分初始化的成员是否安全?

c++ - {} 构造语法有多通用?

java - 使用构造函数将处理程序调用到另一个类的 Activity

c++ - 使用重复的push_back()初始化 vector 时出现的问题

c++ - 在使用相同名称的构造函数参数初始化成员变量时,=和{}之间的区别