我有一个复杂的课程,主要是这样的:
int main()
{
complex c1;
complex c2=c1;
complex c3(c1);
complex c4;
c4=c1;
}
我需要在复杂类中按顺序或所有这些语句使用哪些构造函数? 并且,以下将使用重载的赋值或复制构造函数:
complex c2=c1;
complex c3(c1);
答案 0 :(得分:3)
complex c1;
默认c-tor。
complex c2=c1;
复制c-tor。
complex c3(c1);
复制c-tor。
complex c4;
默认c-tor。
c4=c1;
赋值运算符。
默认构造函数由编译器定义,如果您没有定义其他构造函数(或者您可以定义不带参数的构造函数)。
复制构造函数和赋值运算符由编译器定义,如果没有定义。
答案 1 :(得分:1)
您的问题的一个非常好的匹配答案以及有关该主题的更多信息在以下内容中给出: http://www.gotw.ca/gotw/001.htm或 http://herbsutter.com/2013/05/09/gotw-1-solution
答案 2 :(得分:1)
从现有对象创建新对象时,将调用复制构造函数,作为现有对象的副本。当已经初始化的对象从另一个现有对象分配新值时,将调用赋值运算符。
c4 = c1; // calls assignment operator, same as "c4.operator=(c1);"
complex c2 = c1; // calls copy constructor, same as "complex c2(c1);"