我有一個複雜類主要是一些這樣的:初始化,拷貝構造函數和賦值
int main()
{
complex c1;
complex c2=c1;
complex c3(c1);
complex c4;
c4=c1;
}
我需要什麼構造的複雜類的順序或所有這些語句的工作? 而且,將超載的轉讓或拷貝構造函數在下面的使用:
complex c2=c1;
complex c3(c1);
我有一個複雜類主要是一些這樣的:初始化,拷貝構造函數和賦值
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