類與物件 組合類的建構函式和複製建構函式

2022-09-09 03:36:11 字數 1101 閱讀 6609

初始化列表是用於構造函式引數的初始化,與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。

如:class myclock

;//建構函式的實現和初始化設定

myclock::myclock(int hh,int mm,int ss):hour(hh),minu(mm),second(ss)

;//建構函式的實現和初始化設定

myclock::myclock(int hh,int mm,int ss)

組合類的複製建構函式定義的一般形式為:

//組合類的複製建構函式

類名::類名(類名 &命名的物件名):內嵌物件1(物件名.內嵌物件1),內嵌物件2(物件名.內嵌物件2)......

{函式體內部;

這兩個函式的定義在冒號前的部分和普通類是完全相同的,從:號開始,是運用了初始化列表,所以看起來和普通類不同而已,其實普通類和組合類的建構函式和複製建構函式形式是一樣的。

上述定義其實就是:

//組合類的建構函式

類名::類名(形參表)

//組合類的複製建構函式

類名::類名(類名 &命名的物件名)

內嵌物件1 = 物件名.內嵌物件1

內嵌物件2 = 物件名.內嵌物件2

......

函式體內部;

理解了初始化列表,也就理解了書上所說的組合類的建構函式和複製建構函式的實現形式的奇怪之處,事實上,除了效能問題之外,有些時候合初始化列表是不可或缺的。

以下幾種情況時必須使用初始化列表:

1.常量成員,因為常量只能初始化不能賦值,所以必須放在初始化列表裡面。

2.引用型別,引用必須在定義的時候初始化,並且不能重新賦值,所以也要寫在初始化列表裡面。

3. 沒有預設建構函式的內嵌類的型別,因為使用初始化列表可以不必呼叫預設建構函式來初始化,而是直接呼叫複製建構函式初始化。

類與物件 複製建構函式

二進位制複製不複製指向的記憶體單元,這導致兩個 mystring 物件指向同乙個記憶體單元。函式 usemystring 返回時,變數 str 不再在作用域內,因此被銷毀。為此,將呼叫 mystring 類的析構函式,而該析構函式使用 delete釋放分配給 buffer 的記憶體,這將導致 mai...

類和物件 複製建構函式

形如x x x 或x x const x 二選一,後者能以常量物件作為引數 class complex complex c1 呼叫預設無參建構函式 complex c2 c1 呼叫預設的複製建構函式,將 c2 初始化成和c1一樣class complex complex const complex ...

類和物件基礎 複製建構函式

1 只有乙個引數,即對同類物件的引用。形如 x x x 或x x const x 二者選一後者能以常量物件作為引數 2 如果沒有定義複製建構函式,那麼編譯器生成預設複製建構函式。預設的複製建構函式完成複製功能。例 如果沒有定義複製建構函式 class complex complex c1 呼叫預設無...