初始化,拷贝构造函数和赋值
问题描述:
我有一个复杂类主要是一些这样的:初始化,拷贝构造函数和赋值
int main()
{
complex c1;
complex c2=c1;
complex c3(c1);
complex c4;
c4=c1;
}
我需要什么构造的复杂类的顺序或所有这些语句的工作? 而且,将超载的转让或拷贝构造函数在下面的使用:
complex c2=c1;
complex c3(c1);
答
complex c1;
默认的C-TOR。
complex c2=c1;
copy c-tor。
complex c3(c1);
copy c-tor。
complex c4;
默认c-tor。
c4=c1;
赋值运算符。
如果您没有定义其他构造函数(或者您可以定义不带参数的构造函数),则默认构造函数由编译器定义。
复制构造函数和赋值运算符是由编译器定义的,如果你没有定义的话。
答
一个非常不错的匹配回答你的问题,并在主题的更多信息中给出: http://www.gotw.ca/gotw/001.htm或 http://herbsutter.com/2013/05/09/gotw-1-solution
答
当从现有对象创建新对象
拷贝构造函数被调用,作为副本现有的对象。当已经初始化的对象被赋予来自另一个现有对象的新值时,调用赋值运算符被调用。
c4 = c1; // calls assignment operator, same as "c4.operator=(c1);"
complex c2 = c1; // calls copy constructor, same as "complex c2(c1);"
赋值运算符应该可以访问c2还是仅适用于“complex c5 = complex()”? – 2014-10-28 09:26:20
@只适用于c4。你用c5的例子是复制构造函数。 – ForEveR 2014-10-28 09:28:38