具有一个默认参数的构造函数
Constructor with one default argument
我正在从一本C++书中做和练习,我有这个构造函数原型:
Person(const string & ln; const char * fn = "Heyyou");
现在我必须以这种方式使用此构造函数:
Person two("Smythecraft");
所以我应该将 lname(来自第一个参数的数据)设置为"Smythecraft",将 fname(来自第二个参数的数据)设置为"Heyyou"。
但这也适用于相同的构造函数:
第三人("迪姆威迪"、"山姆");
我试过这个,但它不起作用。为什么?
Person::Person(const std::string &ln, const char * fn = "Heyyou")
{
lname = ln;
fname = fn;
}
我怎样才能做到这一点?
在你的标题中:
class Person
{
public:
// Declaration
Person(const std::string &ln, const char * fn = "Heyyou");
//...
};
在您的源文件中:
// Definition
Person::Person(const std::string &ln, const char * fn):
lname( ln ), // Prefer member-initialization-list
fname( fn )
{
}
如果默认参数已在声明中指定,则不允许在方法定义中指定默认参数。
此外,如果可能,您应该更喜欢使用成员初始化列表。本页的第一篇文章引用了Scott Meyers关于使用成员初始化列表的优势。
我将猜测您的问题,因为您提到了构造函数原型。
不能在原型和实现中指定默认参数。只需在原型中指定它们,然后像普通函数一样保留实现即可。喜欢这个:
// in class
Person(const string & ln, const char * fn = "Heyyou");
// later
Person::Person(const std::string &ln, const char * fn) { ... }
您不需要在方法实现中指定与其声明分开的默认参数值,因为它已在类内部的Person(const string & ln; const char * fn = "Heyyou");
中指定。这:
Person::Person(const std::string &ln, const char * fn)
{
lname = ln;
fname = fn;
}
应该工作。
相关文章:
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在按值调用 (c++) 中转发构造函数参数
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- 如何在构造函数参数中初始化"std::set"?
- 何时应在构造函数参数中使用 const C++?
- 使用模板化结构作为构造函数参数
- 使用 lambda 作为构造函数参数是否需要C++ 17?
- 如何使输入文本文件成为构造函数参数?c++
- shared_ptr构造函数参数是否应按值传递
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- 复制构造函数参数为0
- 用作成员构造函数参数的函数的求值顺序
- 结构中的默认成员值或默认构造函数参数
- C++将引用成员绑定到构造函数参数
- 如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?
- 模板函数指针参数与构造函数参数
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何基于构造函数参数模板化类成员函数的代码
- 将派生类构造函数参数传递给受保护的成员
- 如何根据构造函数参数使用超类类型初始化成员变量?