1. 程式人生 > >C++基礎教程面向物件(學習筆記(42))

C++基礎教程面向物件(學習筆記(42))

綜合測驗

在本章中,我們瞭解了兩個物件之間的一些不同型別的關係。

Summary

從較簡單的物件構建複雜物件的過程稱為物件組合。物件組合有兩種型別:組合和聚合。

當類的成員與類具有部分關係時,就存在組合。在組合關係中,類管理成員的存在。要符合寫作要求,物件和部件必須具有以下關係:

部件(成員)是物件(類)的一部分 部件(成員)一次只能屬於一個物件(類) 部分(成員)的存在由物件(類)管理 部分(成員)不知道物件(類)的存在

組合通常通過普通成員變數實現,或者通過指標管理所有記憶體分配和釋放來實現。如果可以將類實現為組合,則應將類實現為組合。

當類與成員具有has-a關係時,存在聚合。在聚合關係中,類不管理成員的存在。要符合聚合條件,物件及其部件必須具有以下關係:

部件(成員)是物件(類)的一部分 部件(成員)一次可以屬於多個物件(類) 部分(部件)並沒有,它的存在由所述物件(類)管理的 部分(成員)不知道物件(類)的存在 聚合通常通過指標或引用來實現。

關聯是一種更鬆散的關係型別,其中類use - a不相關的物件。要符合關聯條件,物件和關聯物件必須具有以下關係:

關聯物件(成員)與物件(類)無關 關聯物件(成員)一次可以屬於多個物件(類) 關聯的物件(部件)不知道它的存在由物件管理的(類)的 關聯物件(成員)可能知道也可能不知道物件(類)的存在 關聯可以通過指標或引用實現,或者通過更間接的方式實現(例如儲存關聯物件的索引或鍵)。

在依賴中,一個類使用另一個類來執行任務。依賴類通常不是使用它的類的成員,而是臨時建立,使用,然後銷燬,或從外部源傳遞到成員函式。

在容器類中,一個類提供一個容器來容納另一種型別的多個物件。值容器是儲存它保持所述物件的副本的組合物。參考容器是儲存指標或引用所述容器外的物件的集合。

std :: initializer_list可用於實現建構函式,賦值運算子和其他接受列表初始化引數的函式。std :: initailizer_list位於<initializer_list>標頭中。

物件關係 組成 聚合 關聯 依賴
關係型別 整體/部分 整體/部分 無關 無關
成員可以屬於多個類 沒有
成員存在由類管理 沒有 沒有
方向性 單向 單向 單向或雙向 單向
關係動詞 部分 使用 依賴於

Quiz Time

本章非常簡單,比以前的章節更抽象,因此這個測驗將簡短而重要。

1)以下描述了什麼型別的關係(組合,聚合,關聯或依賴)? 1a)包含動物型別(列舉)和名稱(字串)的Animal類。 解決方案 組成 - 動物型別和名稱在動物之外沒有用途。 1b)帶有save()函式的文字編輯器類,它接受File物件。save()函式將編輯器的內容寫入磁碟。 解決方案 依賴關係 - 文字編輯器類使用File物件執行儲存到磁碟的任務。 1c)冒險家類,可以攜帶各種物品,如劍,魔杖,藥水或法術書。這些物品可以被其他冒險者丟棄和拾取。 解決方案 聚合 - 當專案與冒險者相關聯時,冒險者擁有它們。當時任何人都不能使用冒險者使用的劍。但冒險家並沒有管理物品的存在。 1d)程式設計師使用計算機在網際網路上觀看貓視訊。 解決方案 關聯 - 程式設計師和計算機是不相關的,除非程式設計師使用計算機觀看小貓在Roombas上騎行。 1e)包含CPU類的Computer類。可以從計算機中刪除CPU並自行測試。 解決方案 聚合 - 計算機有一個CPU,但不管理它的存在。 2)選擇一個:如果你可以使用(組合,聚合,關聯或依賴)設計一個類,那麼你應該。 解決方案 組成