如何正确地从运算符构造函数中调用复制构造函数?

Iva*_*nov 1 c++ copy-constructor function-call operator-keyword

我的代码也可以在这里找到.

这段代码可行(但代码重复很多):

Employee::Employee(const Employee& x)
{
        name=new char [strlen(x.name)+1];
        strcpy(name, x. name);
        strcpy(EGN, x.EGN);
        salary=x.salary;
}

void Employee::operator=(const Employee& x)
{
        delete[] name;
        name=new char [strlen(x.name)+1];
        strcpy(name, x. name);
        strcpy(EGN, x.EGN);
        salary=x.salary;
}

Employee::Employee(char* n, char* e, double s)
{
        name = new char [strlen(n)+1];
        strcpy(name, n);
        strcpy(EGN, e);
        salary=s;
}
Run Code Online (Sandbox Code Playgroud)

以下是我试图避免三次写同样的事情......但它不起作用.是不是可以缩短代码?

Employee::Employee(char* n, char* e, double s)
{
        name = new char [strlen(n)+1];
        strcpy(name, n);
        strcpy(EGN, e);
        salary=s;
}

Employee::Employee(const Employee& x)
{
        Employee(x.name, x.EGN, x.salary);
}

void Employee::operator=(const Employee& x)
{
        delete[] name;
        Employee(x);
}
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 6

语言不允许您尝试的内容.但是,C++ 11允许委托构造函数,所以你可以这样做:

Employee::Employee(const Employee& x) : Employee(x.name, x.EGN, x.salary){}
Run Code Online (Sandbox Code Playgroud)

请注意,在另一个的初始化列表中调用一个构造函数.

在C++ 11之前,一个选项就是从所有构造函数调用一些初始化函数.但是,这在语义上是不同的,因为函数调用执行成员变量的赋值,而不是初始化.