語法形式:
類名 :: 類名(const 類名 & 引用名 , …);
複製建構函式的特點:
複製建構函式名與類名相同,並且也沒有返回值型別。
複製建構函式可寫在類中,也可以寫在類外。
複製建構函式要求有乙個類型別的引用引數。
如果沒有顯式定義複製建構函式,系統自動生成乙個預設形式的複製建構函式。
複製建構函式的呼叫 :
宣告語句中用類的乙個已知物件初始化該類的另乙個物件時。
point ob1;
point ob2
(ob1)
;
但是:下面的因為s2已提前宣告,所以不會呼叫複製建構函式:
point ob1;
point ob2;
ob2=ob1;
當物件作為乙個函式實參傳遞給函式的形參時,需要將實參物件去初始化形參物件時,需要呼叫複製建構函式。
fun
(point ob1)
;
當物件是函式的返回值時,由於需要生成乙個臨時物件作為函式返回結果,系統需要將臨時物件的值初始化另乙個物件,需要呼叫複製建構函式。
point fun()
關於深複製:
●通過乙個物件初始化另乙個物件時,不僅複製了資料成員,也複製了資源的複製方式稱為深複製。
●自定義複製建構函式所進行的複製是淺複製。
深複製建構函式必須顯式定義
深複製建構函式的特點:
class
string
string
(string& str)
~string()
};intmain()
傳參的時候加上const修飾,能夠提高程式的安全性,魯棒性,防止意外在函式內部將_stdt進行了改變,影響了結果
若定義建構函式若未顯示定義,系統會預設預設的拷貝建構函式。預設的拷貝建構函式會依次拷貝類成員進行初始化。不過預設的拷貝建構函式只是進行了「淺複製」
直接用物件進行傳參的時候,首先會在棧幀中開闢新空間存放建立的臨時變數,來將實參的內容拷貝進去,而建立了臨時變數,在將實參的內容(即物件的內容)拷貝過程中,又要再一次的呼叫拷貝建構函式,這樣的話,會陷入無窮遞迴當中。
C 複製建構函式
c 複製建構函式,一般在一下幾種情況中出現 1 物件以值傳遞的方式傳入函式時 2 物件以值傳遞的的方式從函式返回 3 乙個物件通過另乙個物件初始化 4 陣列 根據陣列中的初始化列表初始化陣列的時候。5 容器 初始化順序容器中的元素 有3種情況必須使用複製建構函式 a 如果有資料成員是指標 b 要在建...
C 複製建構函式
1.概念 只有單個形參,而且該形參是對本類型別物件的引用 常用const修飾 2.首先看乙個小例子 h中 class test private int a float b cpp中 int main test test1 5,5.5 test test2 1,1.1 coutcouttest3使用了...
C 複製建構函式
誰知道 include include using namespace std class person 如果兩種方式同時存在,會呼叫沒有const的版本 2.推薦,存在唯一的person person person person 3.不推薦,這個依然是複製建構函式,詭異。與第二種方法存在二義性 p...