指针参数的默认值

时间:2019-09-07 19:21:46

标签: c++ class

我正在尝试为员工创建一个类,并且对其构造函数有疑问。

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

2 个答案:

答案 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;

并且不需要构造函数,这取决于大小写,但是您会想到,通过在定义上初始化变量,可以减少例如具有多个构造函数的不一致性

相关问题