C 呼叫拷貝建構函式的三種情況。

2021-10-23 04:16:30 字數 797 閱讀 9558

三種情況如下:

1.物件作為函式引數,以值傳遞的方式傳入函式體。

2.物件作為函式返回值,以值傳遞的方式從函式反回。

3.物件用於給另乙個物件進行初始化。

下面通過例題來解釋上面的三種情況:

例題如下:

問題:上面的結果輸出是?

答案如下

解析:1、首先從 b t1 = play(5) 開始 :

play(5) 呼叫了建構函式2 和 一次拷貝建構函式和,編譯時先把 實參5 通過傳參給 play(b b)函式的形參,即 b b = 5; ( 或者b b(5); )這樣便呼叫了建構函式2。因為物件b 作為函式的返回值返回,滿足了上面的呼叫建構函式的第二條,所以呼叫拷貝建構函式

注意1:當我們 b t1 ; 這樣定義物件會預設呼叫建構函式1,但是上面的寫法是接受返回值所以不會去呼叫建構函式1;

注意2:不要和第三條混淆了,第三條是乙個物件給另乙個物件賦值,不是接受函式返回值。例如: b t3 ; b t4 = t3; 這樣滿足第三條

2、下面解釋b t1 = play(t1) :

它呼叫了兩次 拷貝函式,首先看 play(t1) ,是把實參 t1 ,傳給形參 ,即 b b = t1; 滿足第三條,乙個物件給另乙個物件賦值,呼叫拷貝構造,因為返回引數傳給t2,和上面一樣,滿足第二條,再次呼叫拷貝構造。

C 三種呼叫拷貝建構函式的情況

三種呼叫拷貝建構函式的情況 1.用類的乙個物件去初始化另乙個物件時 2.函式的形參是類的物件,呼叫函式,進行形參與實參的結合時 3.函式的返回值是類的物件,函式完成呼叫返回時 產生乙個臨時物件 話不多說,測試 如下 include using namespace std class point po...

拷貝構造函式呼叫的三種情況

拷貝建構函式的引數是本類物件的引用。拷貝建構函式的呼叫有以下三種情形 1 用類的乙個物件去初始化另乙個物件時 2 當函式的形參是類的物件時 值傳遞 如果是引用傳遞則不會呼叫 3 當函式的返回值是類的物件或引用時。拷貝建構函式與賦值操作符的區別 拷貝建構函式的作用是完成對未初始化儲存區的初始化,而賦值...

C 複製建構函式被呼叫的三種情況

class point point point p 複製建構函式 int getx int gety private int x,y point point point p int main 結果 結果 注意 只有把物件用值傳遞時,才會呼叫複製建構函式,如果傳遞引用,則不會呼叫複製建構函式。注意 在...