復制構造函數(shù)是構造函數(shù)的一種,也被稱為拷貝構造函數(shù),他只有一個參數(shù),參數(shù)類型是本類的引用。默認構造函數(shù)(即無參構造函數(shù))不一定存在,但是復制構造函數(shù)總會存在。因為只要沒有自己寫的復制構造函數(shù),就會自動生成一個復制構造函數(shù),它只是實現(xiàn)了對應成員之間的一一對應的復制。大多數(shù)時候這樣一個自動生成的復制構造函數(shù)是夠用的,但是當涉及到“深拷貝”的需求時還是要自己設計復制構造函數(shù)。
構造函數(shù)不能以本類的對象作為唯一參數(shù),以免和復制構造函數(shù)相混淆。舉例子來說就是, CNum(CNum n){}; 這樣的構造函數(shù)是不允許的。
為什么C++要有這樣的機制來保證復制構造函數(shù)一定存在呢,因為在很多種情況下都會需要這樣的構造函數(shù)。
1)當用一個對象去初始化同類的另一個對象時,會調用復制構造函數(shù)。
對基本數(shù)據(jù)類型有這樣的用法:
1 int a = 2;2 int b = a;
第二個語句中使用一個int變量初始化了另一個int變量。對象也可以有類似的初始化方法,用一個對象去初始化另一個同類對象。
1 CNum n1 = 1;2 CNum n2 = n1; //調用復制構造函數(shù)
注意,第二個語句是一條初始化語句,調用了復制構造函數(shù)。如果分開寫成CNum n2; n2 = n1;就不會調用復制構造函數(shù)而是調用無參構造函數(shù),然后調用對=運算符的重載函數(shù)。