C++學習筆記---拷貝構造函數

拷貝構造函數是一種特殊的構造函數
 (1)它是構造函數,所以函數名是類名、沒有返回值
 (2)它是特殊的構造函數:參數形式是固定的
 class Object
 {
 public
Object(const Object& other)
{
this->a=other.a;
this->b=other.b;
...
}
};
 拷貝構造函數的含義:以一個對象爲藍本,來構造另一個對象。
 Object b;
 Object a(b);
 稱作:以b爲藍本,創建一個新的對象a。(a是b的一個拷貝/備份,兩者內容是完全相同)
 拷貝構造函數從不顯示調用,而是由編譯器隱式地調用,在以下三種情況:
 (1)定義對象
 Object  a;
 Object  b(a);//或者寫成Object b = a;
 (2)動態創建對象
 Object  a;
 Object* p = new Object(a);
 (3)函數的傳值調用
 void Test(Object obj);
 區分“構造”與“賦值”
 構造: 
 Object a;
 Object b=a;或者Object b(a);此爲“構造”,在創建對象的時候給初值,拷貝構造函數被調用
 賦值:
 Object a;
 Object b;
 b=a;此爲“賦值”,不會調用拷貝構造函數
 在拷貝構造函數,可以訪問參數對象的任意成員,因爲他們是同類,所以訪問不受限制。
 當沒有書寫拷貝構造函數時,編譯器會默認提供一個拷貝構造函數。默認的拷貝動作:將每一個成員逐個拷貝。
 注意:除非必要,不要添加拷貝構造函數。
 一旦你決定了要添加拷貝構造函數,請仔細檢查:
 (1)所有的成員變量,要依次拷貝所有成員變量,不要遺漏
 (2)調用父類的拷貝構造函數
 只有在深度拷貝的情況下,才需要添加拷貝構造函數。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章