C 引用與複製建構函式

2021-08-04 20:48:10 字數 1622 閱讀 7898

1、什麼是引用?

引用又稱別名(alias),是一種非常特殊的資料型別。它不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名,也就是c++系統不為引用型別變數分配記憶體空間。引用主要用於函式之間的資料傳遞。

引用定義的格式為:

型別 &引用變數名=已定義過的變數名;

例如:double number ;

double &newnum=number ;

newnum是新定義的引用型別變數,它是變數number的別名,兩個變數代表同一塊記憶體。

2、【例4.3】使用乙個函式交換兩個資料。(檢視動畫演示)

#include

void swap(double & d1,double & d2) //d1和d2是引用型變數

void main(void)

double & fsqr2(double a)

int main();

這裡必須注意複製建構函式的引數——同類(class)的物件採用的是引用的方式。如果把乙個真實的類物件作為引數傳遞到複製建構函式,會引起無窮遞迴 。所以必須將複製建構函式的引數定義為乙個類的物件的引用。

2、 若使用者沒有定義複製建構函式,系統會自動提供,稱為預設的按成員語義支援的複製建構函式,每個成員的值被依次拷貝,亦稱為預設的按成員初始化。

按成員作複製是通過依次拷貝每個資料成員實現的,而不是對整個類物件按位拷貝。賦值運算子「=」稱預設的按成員拷貝賦值操作符,同類物件之間可以用「=」直接拷貝 。

3、在某些情況下,預設的按成員複製對類與物件的安全性和處理的正確性還不夠,這時就要求類的設計者提供專門的複製建構函式(copy constructor)和複製賦值操作符'='(copy assignment operator)的定義。

4、複製建構函式的使用

例如以下:物件cary和物件carz的產生就是通過系統自動呼叫複製建構函式的,他們的屬性等和carx完全相同:

cgoods carx(「夏利2000」,30,98000.0);

cgoods cary=carx,carz(carx);

5、複製建構函式並不只是在同類的乙個物件去初始化該類的另乙個物件時使用,它還在另二個方面使用:

1、什麼是成員物件?

【例4.6】含有成員物件的類:

class student

; //類student定義結束

2、student型的物件構造時,其中的成員物件id如何產生?

上面**中,student類的建構函式頭後半部分語句 :id(sid) 即可使系統呼叫物件id所屬類studentid的建構函式,以產生id。

3、c++中對含成員物件的類物件的建構函式有特殊的格式:

類名::建構函式名(引數總表):成員物件1(參數列1),成員物件2(參數列2),……成員物件n(參數列n)

4、先呼叫哪個物件成員的建構函式,取決與它們在類中說明的順序;物件產生時,先初始化物件成員,後初始化其他成員;物件撤銷時,相反。

C 學習 建構函式與複製建構函式

在建構函式的函式頭初始化 includeusing namespace std class rectangle private const int length int width int main void 複製建構函式 預設複製建構函式的機制 includeusing namespace std...

4 5 引用與複製建構函式

1 什麼是引用?引用又稱 別名 alias 是一種非常特殊的資料型別。它不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名,也就是c 系統不為引用型別變數分配記憶體空間。引用主要用於函式之間的資料傳遞。引用定義的格式為 型別 引用變數名 已定義過的變數名 例如 double number ...

C 複製建構函式與型別轉換建構函式

複製構造引數只有乙個引數,即對同類物件的引用,形如 x x x 或x x const x 常用後者。若使用者未定義,則編輯器會生成預設的複製建構函式,完成複製的功能。class complex complex c1 呼叫預設無參建構函式 complex c2 c1 呼叫預設的複製建構函式,將 c2 ...