初始化,拷贝构造函数和赋值

问题描述:

我有一个复杂类主要是一些这样的:初始化,拷贝构造函数和赋值

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; 

赋值运算符。

如果您没有定义其他构造函数(或者您可以定义不带参数的构造函数),则默认构造函数由编译器定义。

复制构造函数和赋值运算符是由编译器定义的,如果你没有定义的话。

+0

赋值运算符应该可以访问c2还是仅适用于“complex c5 = complex()”? – 2014-10-28 09:26:20

+0

@只适用于c4。你用c5的例子是复制构造函数。 – ForEveR 2014-10-28 09:28:38

一个非常不错的匹配回答你的问题,并在主题的更多信息中给出: http://www.gotw.ca/gotw/001.htmhttp://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);"