拷貝(複製)建構函式定義及3種呼叫情況舉例

2021-08-21 18:19:41 字數 1255 閱讀 2702

複製建構函式也是建構函式,但它只有乙個引數,這個引數是本類 的物件(不能是其他類的物件),而且採用物件的引用的形式(一般約定 加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 深拷貝 拷貝的時候...