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)調用父類的拷貝構造函數
只有在深度拷貝的情況下,才需要添加拷貝構造函數。
(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)調用父類的拷貝構造函數
只有在深度拷貝的情況下,才需要添加拷貝構造函數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.