領會 C 複製建構函式 的魅力

2021-10-04 12:14:39 字數 1285 閱讀 1172

語法形式:

類名 :: 類名(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...