我正在尝试为员工创建一个类,并且对其构造函数有疑问。
我的班级看起来像这样(请注意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参数,使其具有默认值,例如“ unknown”。
这是构造函数:
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;
}
答案 0 :(得分:2)
您可以使用字符数组,并将其初始化以指向数组的第一个元素。您可以将数组存储为例如静态成员:
// in the class definition
inline static char default_name[] = "unknown";
// in argument list of the constructor
... char * na = default_name, ...
尽管,您可能要考虑将name
指向非常量指针是否有意义。指向const的指针也许就足够了。在这种情况下,您可以将其初始化为直接指向文字"unknown"
。
答案 1 :(得分:0)
更干净的版本
class Employee {
int id = 0;
char *name = nullptr;
float salary = 0.0;
int hours = 0;
int extra = 0;
并且不需要构造函数,这取决于大小写,但是您会想到,通过在定义上初始化变量,可以减少例如具有多个构造函数的不一致性