複製建構函式也是建構函式,但它只有乙個引數,這個引數是本類 的物件(不能是其他類的物件),而且採用物件的引用的形式(一般約定 加const宣告,使引數值不能改變,以免在呼叫此函式時因不慎而使對 象值被修改)。 如果使用者自己未定義複製建構函式,則編譯系統會自動提供乙個預設的 複製建構函式,其作用只是簡單地複製類中每個資料成員。
(1) 在形式上
類名(形參表列); //普通建構函式的宣告,如box(int h,int ,int en);
類名(類名& 物件名); //複製建構函式的宣告,如box(box &b);
(2) 在建立物件時,實參型別不同
系統會根據實參的型別決定呼叫普通建構函式或複製建構函式。
如 box box1(12,15,16); //實參為整數,呼叫普通建構函式
box box2(box1); //實參是物件名,呼叫複製建構函式
(3) 在什麼情況下被呼叫
普通建構函式在程式中建立物件時被呼叫。 複製建構函式在用已有物件複製乙個新物件時被呼叫,在以下3 種情況下需要轉殖物件:
① 程式中需要新建立乙個物件,並用另乙個同類的物件對它初始化:
box2=box1//box2(box1)
② 當函式的引數為類的物件時。在呼叫函式時需要將實參物件 完整地傳遞給形參,也就是需要建立乙個實參的拷貝,這 就是按實參複製乙個形參,系統是通過呼叫複製建構函式 來實現的,這樣能保證形參具有和實參完全相同的值。如
void fun(box b) //形參是類的物件
int main( )
//建構函式
~point(); //析構函式
point(const point &p); //複製建構函式
int getx()const
int gety()const
private:
int x,y;//私有成員
};point::point(const point &p)
{ x = p.x;
y = p.y;
cout << "calling the copy constructor" 執行結果如下:
呼叫C 複製建構函式和拷貝建構函式
呼叫c 複製建構函式和拷貝建構函式 1.何時呼叫複製建構函式 複製建構函式用於將乙個物件複製到新建立的物件中。也就是說,它用於初始化過程中,而不是常規的賦值過程中。類的複製建構函式原型通常如下 class name const class name 它接受乙個指向類物件的常量引用作為引數。例如,st...
什麼時候呼叫複製建構函式(拷貝建構函式)
原文 slyar home www.slyar.com 這個問題不是疑問了,查了一下國外 總結一下。假設person是乙個類,複製建構函式的呼叫會在以下幾種情況下發生 1 物件在建立時使用其他的物件初始化 person p q 此時複製建構函式被用來建立例項p person p q 此時複製建構函式...
拷貝建構函式(複製建構函式)
執行 物件a 物件b時,系統需要呼叫拷貝建構函式,如果程式設計師沒寫,則呼叫預設的拷貝建構函式。預設的拷貝建構函式利用淺拷貝方式,它的樣子是 a const a a 淺拷貝 拷貝的時候,兩個指標指向同乙個區域 char str1 helloworld char str2 str1 深拷貝 拷貝的時候...