指针参数的默认值
default value for a pointer parameter
我正在尝试为员工创建一个类,但其构造函数有问题。
我的类看起来像这样(请注意 name 参数是char*
类型(:
class Employee {
int id;
char * name ;
float salary;
int hours;
int extra;
public:
//constructor
Employee(int, char *, float, int, int);
//Getters and Setters:
void setId(int a) { id = a; }
int getId() { return id; }
void setName(char * c) { name = c; }
char * getName() { return name; }
void setSalary(float f) { salary = f; }
float getSalary() { return salary; }
void setHours(int h) { hours = h; }
int getHours() { return hours; }
void setExtra(int e) { extra = e; }
int getExtra() { return extra; }
};
我构建了一个构造函数,我希望它具有默认参数,但我不知道如何处理 name 参数以具有默认值,例如"未知"。
这是构造函数:
Employee::Employee(int i = 123456789, char * na, float sal = 30, int ho = 45, int ex = 10)
{
id = i;
name = na;
salary = sal;
hours = ho;
extra = ex;
}
您可以使用字符数组,并将数组初始化为指向数组的第一个元素。例如,您可以将数组存储为静态成员:
// in the class definition
inline static char default_name[] = "unknown";
// in argument list of the constructor
... char * na = default_name, ...
虽然,您可能需要考虑name
指向非常量指针是否有意义。也许指向常量指针就足够了。在这种情况下,您可以初始化它以直接指向文字"unknown"
。
更干净的版本
class Employee {
int id = 0;
char *name = nullptr;
float salary = 0.0;
int hours = 0;
int extra = 0;
而且你不需要有构造函数,这取决于情况,但你会得到这样的想法,即通过初始化定义上的变量,你可以减少拥有多个构造函数的不一致
,例如相关文章:
- 当给定默认值时,为什么此模板参数推导失败
- 如何在C++中提供模板化函数作为另一个函数的参数,默认值?
- 在 c++ 中,如果我创建一个接受一个具有默认值的参数的构造函数 - 它会用作默认(空)构造函数吗?
- 为什么无法在可变参数模板中将尾随模板参数指定为默认值?
- 可变参数模板和具有继承的默认值
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 在子类函数覆盖中省略具有默认值的参数
- 函数作为具有默认值的参数
- 具有另一个具有默认值的模板参数的模板推导
- const变量是否可以在具有默认值的参数中赋值(作为可选参数)
- 对 const 引用参数使用默认值会导致崩溃
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 指针参数的默认值
- C++中出现意外的编译错误:将默认值传递给函数参数
- 我可以在哪里放置参数的默认值
- 如何在C++中设置std::list参数的默认值?
- 具有默认值的参数的自动类型扣除
- Clang vs GCC - 可变参数模板参数包后跟默认值参数在 GCC 4.8 中有效,但在 Clang 3.5 中无
- c++变长函数中默认值参数的位置
- 将函数指针上的参数与默认值参数一起丢弃是否有效