拷貝構造又叫複製構造;若是沒有實現拷貝構造函數,c++會自動生成一個,叫作隱式拷貝構造函數.該自動生成的隱式拷貝構造也能應付絕大部分狀況.c++
拷貝構造函數的格式:函數
//定義 class CTest { public: CTest(intxx=0,intyy=m)(X=xx;Y=yy;) CTest(const CTest & p); int getX(){return X;} int getY(){return Y;} private: int X; int Y; }; //拷貝構造的實現 CTest::CTest(const CTest& p) { X = p.X; Y = p.Y; std::cout<<"拷貝構造函數調用"<<std::endl; }
拷貝構造函數的調用:code
1)一個對象用於給另一個對象進行初始化(常稱爲賦值初始化);對象
CTest testA = new CTest(10,20); CTest testB = testA ; 或者 CTest TestC(testA );
2)一個對象做爲函數參數,以值傳遞的方式傳入函數體;get
//參數是對象,是值傳遞,會調用拷貝構造函數 int GetValue(CTest aa) { return aa.getX(); } //錯誤示範:若是參數是引用類型,自己就是引用傳遞,因此不會調用拷貝構造函數 int GetValue(CTest & aa) { return aa.getX(); }
3)一個對象做爲函數返回值,以值傳遞的方式從函數返回;class
//返回值是對象類型,會調用拷貝構造函數。會調用拷貝構造函數,由於函數體內生成的對象aa是臨時的,離開這個函數就 //消失了。全部會調用拷貝構造函數複製一份。 CTest GetX() { CTest aa(11,20); return aa; } //會調用拷貝構造函數,由於函數體內生成的對象aa是臨時的,離開這個函數就消失了。全部會調用拷貝構造函數複製一份。 CTest & GetX() { CTest aa(1); return aa; }