1. 建構函式初始化表
之前的類的建構函式的初始化都是使用賦值=來完成;
對於常量和引用參數,簡單的賦值=是不足夠的。
1)初始化列表
賦值有顯式和隱式賦值兩種。
之前的類的初始化如:
現在,採用一種初始化列表:
如所示,初始化列表位於建構函式的參數之後,以':'標誌,每個變數的初始化採用隱式賦值,變數直接以逗號隔開。
這樣,對於常量變數,可以在初始化列表中初始化;
初始化列表常用於複合類和繼承。
2. 複合類
現實中,複雜的對象都是由較小和較為簡單的對象構成;
由簡單對象建立複雜物件的過程稱作合成。
合成通常使用在有has-a關係的對象;
通常的基礎資料型別 (Elementary Data Type)可以滿足構造簡單和小的對象。
為了從小的對象建立複雜的對象,C++提供了複合類-將小的類作為複合類的成員變數。
例如:
Point2D.h
Creature.h:
Main.h:
使用複合類的好處:
A)每個單獨的類可以保持相對簡單和直觀,負責其自己的任務;
B)每個對象可以自包含,更易重用;
C)複合類使用簡單的類完成複雜的工作,只需注重子類之間的資料流程。
到底何時適合使用複合類呢?這個沒有固定的答案,只需記住每個類應該完成單一的工作。
複合類不需考慮組合子類的實現細節,這些都是子類所關心的。
3. 彙總類
在上一節中,複合類對象的各個子類對象,隨著複合類對象的銷毀而銷毀。
彙總類是複合類中比較特殊的類型,彙總對象和子物件之間沒有從屬關係;當彙總對象銷毀時,子物件並沒有銷毀。
一個很簡單的例子:
一個學校的部門由多個老師構成,並不是說部門擁有(own)了這些老師,她們僅僅是在那裡工作;這時,部門可以看作是一個彙總類;
當部門撤銷或解散了,老師還是老師,並沒有消失;她們還可以分配到其他部門工作。(不像電腦一樣,電腦銷毀了,內部的CPU、主板等等都銷毀了)
在彙總類中,也是將子類加到複合類中,形式是引用或者指標,引用或指向了在類外已經定義的對象;當綜合物件銷毀了,這些對象依然存在的。
例如:
複合類和彙總類的異同:
複合類:A)可以使用常規變數;B)可以使用指標,如果涉及動態分配和釋放記憶體;C)負責每個子類的建立和銷毀;
彙總類:A)通常使用指標執行類外的已存在對象;B)可以使用指向對象的引用值;C)不需要負責每個子類的建立和銷毀。
彙總類非常使用,但風險也高;特別要注意記憶體的分配與釋放,預防記憶體流失。
4. 容器類
現實中,容器是最常見的。容器的容量是容器能夠儲存多少的能力。
類似,容器類是用以裝載和組織其他類的執行個體的。
大多時候用的容器是數組;數組通常提供了動態長度,以及邊界檢查。
容器類典型應用了標準的最小功能集。
好的定義容器通常包含如下功能:
1)建立一個空的容器;2)插入一個新的元素對象;3)報告當前容器的元素個數;4)清空容器的所有元素;5)提供訪問元素的方法;6)排列元素(可選)。
容器類通常分2種:值容器-只包含了對象的拷貝;引用容器-包含了對象的引用。
在C++中,容器通常只包含一種資料類型;
容器是非常有用的,它使編程更容易、安全和快速。
下面是一個典型的例子-數組容器類:
Main.cpp:
【免責特此聲明:
1)本內容可能是來自互連網的,或經過本人整理的,僅僅代表了互連網和個人的意見和看法!
2)本內容僅僅提供參考,任何參考該內容造成任何的後果,均與原創作者和本部落格作者無關!】