拷貝建構函式是一種特殊的建構函式,函式的名稱必須和類名稱一致,它必須的乙個引數是本型別的乙個引用變數。
拷貝函式用於物件的初始化。 例:乙個簡單得拷貝函式如下
class test3
~test3()
};
直接定義乙個物件來初始化另乙個物件,具體有兩種寫法。
class test3
~test3()
};void objectplay1()
該場景中有乙個全域性函式 void f(location p), void f(location p)的傳入引數是乙個元素,就是我們定義的location。
class location
location(location &obj)
~location()
int gexx() int gety()
private:
int x;
int y;
};//形參是乙個元素,此時初始化會呼叫一次拷貝建構函式!!!
void f(location p)
void objectplay2()
呼叫f()函式的過程中,會經歷一下幾個步驟:
可以通過分步除錯驗證!
該場景中我們定義了乙個 location g() ,返回值為我們的物件。
class location
location(location &obj)
~location()
int gexx() int gety()
private:
int x;
int y;
};//第三種 難點
//g函式返回乙個元素
//結論1:函式的返回值是乙個元素(複雜型別的),返回的是乙個新的匿名物件
//所以會呼叫匿名物件的拷貝建構函式!
//結論2:匿名物件的去和留
//如果用匿名物件初始化寧外乙個同型別的物件,那麼匿名物件直接轉成有名物件
//如果用匿名物件賦值(=)給寧外乙個同型別的物件,匿名物件就被析構。
//你這樣寫c++設計者就認為你要返回乙個新物件(匿名物件)
location g()
void objectplay3_1()
void objectplay3_2()
在void objectplay3_1場景中執行到location g() 的return時,會產生以下幾個重要的步驟:
在void objectplay3_2場景中執行到location g() 的return時,會產生以下幾個重要的步驟:
C 三種呼叫拷貝建構函式的情況
三種呼叫拷貝建構函式的情況 1.用類的乙個物件去初始化另乙個物件時 2.函式的形參是類的物件,呼叫函式,進行形參與實參的結合時 3.函式的返回值是類的物件,函式完成呼叫返回時 產生乙個臨時物件 話不多說,測試 如下 include using namespace std class point po...
C 呼叫拷貝建構函式的三種情況。
三種情況如下 1.物件作為函式引數,以值傳遞的方式傳入函式體。2.物件作為函式返回值,以值傳遞的方式從函式反回。3.物件用於給另乙個物件進行初始化。下面通過例題來解釋上面的三種情況 例題如下 問題 上面的結果輸出是?答案如下 解析 1 首先從 b t1 play 5 開始 play 5 呼叫了建構函...
拷貝構造函式呼叫的三種情況
拷貝建構函式的引數是本類物件的引用。拷貝建構函式的呼叫有以下三種情形 1 用類的乙個物件去初始化另乙個物件時 2 當函式的形參是類的物件時 值傳遞 如果是引用傳遞則不會呼叫 3 當函式的返回值是類的物件或引用時。拷貝建構函式與賦值操作符的區別 拷貝建構函式的作用是完成對未初始化儲存區的初始化,而賦值...