指针参数的默认值

default value for a pointer parameter

本文关键字:默认值 参数 指针      更新时间:2023-10-16

我正在尝试为员工创建一个类,但其构造函数有问题。

我的类看起来像这样(请注意 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;

而且你不需要有构造函数,这取决于情况,但你会得到这样的想法,即通过初始化定义上的变量,你可以减少拥有多个构造函数的不一致

,例如