如何设置默认参数以防用户不输入另一个参数

How to set default parameters In case a user does not type in the other one

本文关键字:参数 用户 另一个 输入 默认 何设置 设置      更新时间:2023-10-16
#include <iostream>
class Person {
friend std::ostream &operator<<(std::ostream &os, const Person &person);
std::string name;
int age;
public:
std::string get_name () {return name;}
int get_age() {return age;}
Person() : name{"Unknown"}, age{0} {}
Person(std::string name, int age) : name{name}, age{age} {}
};
std::ostream &operator<<(std::ostream &os, const Person &person) {
os << person.name << ": " << person.age;
return os;
}
int main () {
Person Austin{"Austin", 12}; 
}

我试图将它放在我的名字中输入"奥斯汀"的位置,但是如果我不输入年龄,它会自动将其设为 0,因为我没有输入年龄。

从 C++11 开始,您可以利用委托构造函数:您可以提供一个额外的构造函数重载,该重载仅对名称进行std::string,并委托给接受两个参数std::stringint的现有构造函数。然后,只需将0作为第二个参数传递给委托的构造函数:

Person(std::string name) : Person(name, 0) {}

也就是说,Person(std::string)将是委托构造函数,现有构造函数Person(std::string, int)委托构造函数。


另一种方法是对接受std::stringint的现有构造函数的第二个参数使用默认参数

Person(std::string name, int age = 0) : name{name}, age{age} {}

后一种方法的缺点是默认参数始终直接在客户端代码中编译。这使得每当默认参数更改时都需要重新编译客户端代码。

C++有默认参数,请使用它们。

Person(std::string name, int age=0) : name{name}, age{age} {}

完全按照您的要求做

int main () {
Person Austin{"Austin"}; 
std::cout << Austin << std::endl; //prints out "Austin: 0"
}