使用默认值或使用 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初始化,可以在成员声明站点进行。
我想知道是否有可能在 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初始化,可以在成员声明站点进行。