gpt4 book ai didi

c++ - 如何从内部运算符构造函数正确调用复制构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:19:33 25 4
gpt4 key购买 nike

我的代码也可以找到here .

这段代码可以工作(但有很多代码重复):

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;
}

下面是我尝试避免将同一内容写三次的尝试……但它不起作用。是否可以缩短该代码?

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);
}

最佳答案

您正在尝试的是该语言不允许的。但是,C++11 允许 delegating constructors ,所以你可以这样做:

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

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

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

关于c++ - 如何从内部运算符构造函数正确调用复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12205294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com