c++_拷貝構造函數

拷貝構造又叫複製構造;若是沒有實現拷貝構造函數,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;  
}
相關文章
相關標籤/搜索