復(fù)制構(gòu)造函數(shù)是構(gòu)造函數(shù)的一種,也被稱為拷貝構(gòu)造函數(shù),他只有一個參數(shù),參數(shù)類型是本類的引用。默認(rèn)構(gòu)造函數(shù)(即無參構(gòu)造函數(shù))不一定存在,但是復(fù)制構(gòu)造函數(shù)總會存在。因為只要沒有自己寫的復(fù)制構(gòu)造函數(shù),就會自動生成一個復(fù)制構(gòu)造函數(shù),它只是實現(xiàn)了對應(yīng)成員之間的一一對應(yīng)的復(fù)制。大多數(shù)時候這樣一個自動生成的復(fù)制構(gòu)造函數(shù)是夠用的,但是當(dāng)涉及到“深拷貝”的需求時還是要自己設(shè)計復(fù)制構(gòu)造函數(shù)。

構(gòu)造函數(shù)不能以本類的對象作為唯一參數(shù),以免和復(fù)制構(gòu)造函數(shù)相混淆。舉例子來說就是, CNum(CNum n){}; 這樣的構(gòu)造函數(shù)是不允許的。

為什么C++要有這樣的機(jī)制來保證復(fù)制構(gòu)造函數(shù)一定存在呢,因為在很多種情況下都會需要這樣的構(gòu)造函數(shù)。

1)當(dāng)用一個對象去初始化同類的另一個對象時,會調(diào)用復(fù)制構(gòu)造函數(shù)。

對基本數(shù)據(jù)類型有這樣的用法:

1 int a = 2;2 int b = a;

第二個語句中使用一個int變量初始化了另一個int變量。對象也可以有類似的初始化方法,用一個對象去初始化另一個同類對象。

1 CNum n1 = 1;2 CNum n2 = n1;        //調(diào)用復(fù)制構(gòu)造函數(shù)

注意,第二個語句是一條初始化語句,調(diào)用了復(fù)制構(gòu)造函數(shù)。如果分開寫成CNum n2; n2 = n1;就不會調(diào)用復(fù)制構(gòu)造函數(shù)而是調(diào)用無參構(gòu)造函數(shù),然后調(diào)用對=運算符的重載函數(shù)。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式