C 學習類的深入

2021-06-21 16:27:13 字數 1767 閱讀 9656

****

1. 建構函式初始化表

之前的類的建構函式的初始化都是使用賦值=來完成;

對於常量和引用引數,簡單的賦值=是不足夠的。

1)初始化列表

賦值有顯式和隱式賦值兩種。

之前的類的初始化如:

現在,採用一種初始化列表:

如上圖所示,初始化列表位於建構函式的引數之後,以':'標誌,每個變數的初始化採用隱式賦值,變數直接以逗號隔開。

這樣,對於常量變數,可以在初始化列表中初始化;

初始化列表常用於復合類和繼承。

2. 復合類

現實中,複雜的物件都是由較小和較為簡單的物件構成;

由簡單物件建立複雜物件的過程稱作合成。

合成通常使用在有has-a關係的物件;

通常的基本資料型別可以滿足構造簡單和小的物件。

為了從小的物件建立複雜的物件,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:

**

深入C 中類的方法

1.類中的構造方法 語法 與類名相同,不能有返還值,不能加void。使用快捷鍵 ct 雙擊tab 自動為當前的類新增不帶引數的預設建構函式。作用 對類進行例項化物件的操作實質就是呼叫當前類的構造方法 還可以使用帶引數的構造方法完成對類的屬性的賦值操作。快速的例項化物件並且為屬性賦值,在實際工作中應用...

深入解析C 中的string類

一,c語言的字串 在c語言裡,對字串的處理一項都是一件比較痛苦的事情,因為通常在實現字串的操作的時候都會用到最不容易駕馭的型別 指標。比如下面這個例子 example 1 char str 12 hello char p str p h 改變第乙個字母 example 2 char ptr hell...

C 類函式深入理解

先看一段 class a void print const int main int argc,const char argv 執行結果 a print 0x100000eb0 print enter.this 0x0 a v 1 空指標 那麼問題來了。一般情況下,a null,為空指標,訪問a都是...