我想知道是否有可能在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
答案 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初始化列表中显式初始化它们,这会很麻烦。使用类内初始化,您可以在成员声明站点执行此操作。