復合 委託(關聯) 繼承

2021-09-23 14:38:08 字數 1123 閱讀 7665

在這個例子中,queue類中包含了deque類,並且開放了部分的deque的介面,這種乙個類裡面完整的包含了某個類的關係叫做復合。同時該種關係的類圖也已經在圖上呈現,是乙個黑色實心的菱形。deque的生命週期也完全由queue管理。這一點從底層的記憶體分布上可以更清楚的看出來

每乙個上層的類在記憶體上是完全擁有了內層類,屬於has-a的關係,有乙個該類。

在這部分是需要理解構造和析構兩者的順序,這點是比較好理解的,對於我們程式設計來說,是沒有顯式的體現的。

所以總結來說,乙個類裡面完整的包含了乙個另乙個類,那麼這兩個類之間的關係就可以說是復合了。

委託又可以叫做 引用形式的聯合 composition by reference

原來復合是包含乙個完整的類,而委託則是包含乙個類的指標

類圖上是乙個空心的菱形。

委託形式下的類與類之間沒有之前復合時候那麼強的關係,它們只是用指標連在了一起,完全可以單獨存在。左下方的記憶體圖很形象的表示了出來,一開始多個物件指向同一塊記憶體,如果某個物件需要修改記憶體,那麼會單獨複製乙份出來,採用copy-on-write的方式。

另外,其中impl手法是這種類關係的乙個典型例子,乙個類作為body,另乙個類作為impletation,body類中的成員都需要通過呼叫impletation中來實現

繼承這個就比較好理解了,就是兒子繼承父親,把父類的一些內容作為自己的一部分,然後自己還可以再開創乙份,當然繼承這個還有很多需要注意的地方,尤其是建構函式父類子類的繼承還有虛函式等,另外再寫一篇吧。繼承和復合比起來,可以說是is-a。類圖上是乙個空心的三角形

復合,繼承,委託

復合其實是一種 has a 的關係,就是說乙個類裡面有其他類的物件 例如在stl標準庫的實現中,queue裡面有乙個deque template class queue size type size const void push const value type x void pop queue的...

繼承 or 復合?

django已經連續寫了很多篇,這裡先暫停一下,換換口味,實際上有了之前的簡單介紹,如果有一些web開發基礎的,已經可以開發了。後續我還會寫一些文章進行說明。今天介紹的內容在開發中很有意義,所以拿出來和大家聊聊,希望對大家今後的工作有所幫助。繼承是物件導向的重要概念,是依賴關係的一種,主要用來實現類...

多型 繼承 復合

1.為什麼建立的son物件可以給father類的指標賦值?賦值相容規則 可以用父類的指標指向子類的物件。inte ceson father father laowang son alloc init 在通過物件指標去呼叫方法的時候,我們不看指標是什麼型別的指標,只看指標所指向的物件。多型。多型的基礎...