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)
语言不允许您尝试的内容.但是,C++ 11允许委托构造函数,所以你可以这样做:
Employee::Employee(const Employee& x) : Employee(x.name, x.EGN, x.salary){}
Run Code Online (Sandbox Code Playgroud)
请注意,在另一个的初始化列表中调用一个构造函数.
在C++ 11之前,一个选项就是从所有构造函数调用一些初始化函数.但是,这在语义上是不同的,因为函数调用执行成员变量的赋值,而不是初始化.