天天看點

《C++面向對象高效程式設計(第2版)》——2.28 組合

本節書摘來自異步社群出版社《c++面向對象高效程式設計(第2版)》一書中的第2章,第2.28節,作者: 【美】kayshav dattatri,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

c++面向對象高效程式設計(第2版)

這是一種聚集形式,有很強的生存期,且部分和整體之間的所有權依賴關系也很強。聚集(容器)的多重性不能超過1個(無共享)。組合可以用三種不同的方式表示,其中一種熟悉的符号就是實心菱形。例如,airplane(飛機)對象有一個cockpit(駕駛艙)、 engine(引擎)、seats(座椅)等。cockpit對象與airplane對象一起被建立(見圖2-25),一起被銷毀(聚集是不可改變的)。

《C++面向對象高效程式設計(第2版)》——2.28 組合
《C++面向對象高效程式設計(第2版)》——2.28 組合

圖2-28

當多重性(基數)大于1時,可以在建立聚集本身後再建立部分(part),除非在聚集被銷毀前,顯式移除部分,否則部分會和聚集一起被銷毀。一架airplane有多個engine和多個seat等,而且在airplane類對象的生存期内,可以添加或移除seat。當airplane類對象被銷毀後,它所包含的所有對象都會被銷毀,除非它們已經從airplane類對象中移除(例如,座椅可能被移除,複用于另一架飛機中)。在圖2-26或圖2-27中都表示了組合關系。

繼續閱讀