如何设置默认参数以防用户不输入另一个参数
How to set default parameters In case a user does not type in the other one
#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::string
和int
的现有构造函数。然后,只需将0
作为第二个参数传递给委托的构造函数:
Person(std::string name) : Person(name, 0) {}
也就是说,Person(std::string)
将是委托构造函数,现有构造函数Person(std::string, int)
委托构造函数。
另一种方法是对接受std::string
和int
的现有构造函数的第二个参数使用默认参数:
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"
}
相关文章:
- 使用用户定义的参数调用future/async并调用类方法
- 参数包构造函数在类模板中隐藏用户定义的转换
- 用户输入作为参数C++
- 如何设置默认参数以防用户不输入另一个参数
- 在未显式传递参数时默认使用 lambda 的用户输入
- 如何防止用户指定函数模板参数,迫使其进行推导
- 如何对多个模板参数使用用户定义的推导指南
- 读取用户必须提供一些参数的文件
- 使用用户定义的转换运算符推导函数模板参数
- 用户定义的转换不适用于可变参数函数参数?为什么不呢?
- 用户指定的参数,用于确定在大循环中调用哪个函数
- 有没有办法根据用户参数设置函数指针?
- 指定在用户固定我的应用程序时用于运行应用程序的命令参数
- 用户定义的构造函数重载与参数超类的重载不匹配
- 作为传递给 CPP 类构造函数的参数的用户定义函数
- 如何在 C/C++ 中使用用户定义的参数对库进行编码
- 我如何与C 中的用户输入正确使用参数
- 迫使用户传递已知类型的模板参数,该参数本身是模板
- 推导用户定义的值模板参数(C++2a、P0732R2)
- 基于用户表达式在编译时参数化函数