使用默认值或使用 setValue 创建构造函数

Creating constructor with default value or with setValue

我想知道是否有可能在 C++ 中创建一个使用例如 float 的构造函数,但这个 float 不是必需的。我的意思是:

构造函数:

Fruit::Fruit(float weight)
{
    weight = 1;
    this->setWeight(weight);
}

我需要使用一个构造函数来做类似的事情:

Fruit pear = Fruit(5);          - gives a pear with weight 5
Fruit strawberry = Fruit();     - gives a strawberry with default weight 1

是的,这可以通过在参数列表中用 = 指定值来完成:

Fruit::Fruit(float weight = 1)
{
    this->setWeight(weight);
}

使用in-class初始化,可以显着清理代码:

class Fruit {
public:

  Fruit() = default;
  Fruit(float weight) : weight_{weight} {}

  // ... other members

private:
  float weight_ { 1.0f };

};

这样,如果调用默认 c'tor,则会自动创建默认权重“1”。这有利于显着清理构造函数中的初始化列表。考虑一下如果您有许多 class 成员默认初始化为垃圾值(即任何内置类型)会发生什么。然后你将不得不在 c'tor 初始化列表中显式初始化它们,这会变得很麻烦。使用in-class初始化,可以在成员声明站点进行。