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

时间:2015-11-12 07:18:56

标签: c++ constructor default-value

我想知道是否有可能在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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

使用类内初始化,可以显着清理代码:

class Fruit {
public:

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

  // ... other members

private:
  float weight_ { 1.0f };

};

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