【发布时间】:2014-01-25 00:57:26
【问题描述】:
我有一个包含 5 个变量的类:2 个字符串、2 个双精度数和一个整数。
用户将始终能够提供至少一个字符串和一个双精度,但可能无法提供其余信息,这意味着应包含默认参数。
当然,尝试使用所有参数创建一堆构造函数是行不通的——它无法编译。
假设我尝试这样的事情:
Object(std::string s1, double d1) {
this->string1 = s1;
this->double1 = d1;
this->int1 = 0;
this->double2 = 0.0;
this->string2 = "foo";
}
Object(std::string s1, double d1, int i) {
this->string1 = s1;
this->double1 = d1;
this->int1 = i;
this->double2 = 0.0;
this->string2 = "foo";
}
// and so on...
这将重载构造函数,但这些仍被视为默认参数吗?
有没有办法让每个构造函数中的每个参数都包含默认参数?即,类似于这种不起作用的东西:
Object(std::string s1, double d1, int i = 0, std::string s2 = "foo", double d2 = 0.0) {
...
}
Object(std::string s1, double d1, int i, std::string s2 = "foo", double d2 = 0.0) {
...
}
// and so on...
这样做的问题是,如果用户只有所需的 5 个值中的 4 个,则在某些时候它必须“跳过”一个参数。例如,如果我只使用了第一个字符串,而用户没有第二个字符串,那么就没有办法越过它来传递第二个双精度数。
【问题讨论】:
-
在上一个示例中只有第一个签名有什么问题?
-
您遇到什么错误?您在第二个示例中尝试执行的操作应该有效。
-
没错。这就是你所需要的。你想多了。
标签: c++ class constructor