Inheritance, Association, Aggregation, and Composition 類的繼承,關聯,彙總和組合的區別

來源:互聯網
上載者:User

標籤:

 

在C++中,類與類之間的關係大概有四種,分別為繼承,關聯,彙總,和組合。其中繼承我們大家應該都比較熟悉,因為是C++的三大特性繼承Inheritance,封裝Encapsulation,和多態Polymorphism之一。

繼承Inheritance:是指一個類(子類)來繼承另一個類(基類),並增加自己的功能,可以通過重寫基類中的函數來實現。可以將繼承理解成“IS A”的關係,比如A cat "IS A" animal, or A car "IS A" vehicle.

 

關聯Association:是類之間很弱的一種聯絡,在C++中表現為一個類作為另一個類方法的參數,比如:

class A;class B;A::Function1(B &b);A::Function2(B b);A::Function3(B *b);

 

彙總Aggregation:指的是整體和部分的關係,通過從別的類中拿來函數來組成一個新類,或在新類中添加其他代碼的一個常用的介面Interface。可以將彙總理解成“HAS A”, 比如 A car "HAS A" engine, or A person "HAS A" name.

Inheritance v.s. Aggregation: 我們有時候會猶豫何時該用繼承,何時該用彙總,通常來說,當一個介面Interface的部分不需要使用或是應該被修改以避免不合邏輯的情況時,我們需要用彙總。假如我們需要用幾乎所有的函數而並不需要太大的改變時,使用繼承。

 

組合Composition:和彙總類似,也是表示整體和部分的關係,但不同的是,整體和部分具有統一的生存期,一旦整體不存在了,部分也就沒有了。可以將組合理解成“CONTAIN A", 比如地球和人的關係,假如地球毀滅了,那麼人類也就玩完了,這是組合的關係。那麼彙總的關係就好比主機和其外設,即使主機掛了,外設也可以連到其他機子上使用。在C++中,比如:

class A;class B { A *a; ... };class C { A a; ... };

如上所示,類A和類B是彙總關係,因為B包含了A的指標,即使B銷毀了,A還會在。而類A和類C是組合關係,C包含了A的對象,C一旦銷毀,A也就不複存在了。

 

參考資料:

http://blog.csdn.net/daxiamit/article/details/6433678

http://stackoverflow.com/questions/269496/inheritance-vs-aggregation

http://stackoverflow.com/questions/5543288/inheritance-vs-aggregation-and-has-a-vs-is-a

 

Inheritance, Association, Aggregation, and Composition 類的繼承,關聯,彙總和組合的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.