如果一個構造函數中的第一個參數是類本身的引用,或者是其他的參數都有默認值,則該構造函數為拷貝構造函數。
那么什么是拷貝構造呢?利用同類對象構造一個新對象。
1,函數名和類必須同名。
2,沒有返回值。
3,第一個參數必須類本身的對象的const引用,可以有其他的參數,但是必須有默認值。
4,不能重載。
class A{public:A();A(const A &t);//拷貝函數private:};
拷貝函數中,形參幾乎都為const,并且必須是引用。其作用就是,使用一個已經創造出來的對象來初始化另一個新對象,當然我們如果不寫這個函數,系統也會自動生成一個為什么也不干的拷貝構造函數,并依次把非static的成員一一拷貝到正在創建的對象當中去。
前面說過,必須用引用。因為:為了調用拷貝構造函數,我們必須復制他的實參,而復制實參我們又必須去調用拷貝構造函數,從而陷入了一個死循環。
拷貝構造函數的特征:
1,拷貝構造函數的名字與類名相同
2,它只能有一個參數,如果有其他的,那么必須有默認值。
3,每一個類都有一個拷貝構造函數,如果你沒有定義,系統會自動生成一個拷貝構造函數。
以下,寫一個拷貝構造函數的例子:
主函數如下
而賦值就是,先初始化,然后被給予值。使用=即可實現。
class A{......};
A a,b;
......(省略中間初始化a的過程)
b=a;
如上
最后總結:
如果類中出現指針,拷貝構造函數,析構函數必須自己寫,否則會出現嚴重的錯誤,比如連續的釋放同一處空間,或者是一個指針同時指向了兩個地址。這就是所謂的淺拷貝。
每日金句:
? ? ? ? 走自己的路,讓他人為之側目
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ————“輕摟愛莉熱吻”
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?