C++面向對象高級編程(上)學習筆記

類與類之間三種主要關係

GeekBand 侯捷

這裏寫圖片描述

1、Conposition(複合)has -a

典例:

這裏寫圖片描述

複合的部分特點:

1、前者A擁有後者B,A中的所有功能都有B來做。
2、一般B的功能更加強大,一些功能“改頭換面”用來實現A的功能。
3、A與B緊密相連,生存期相同。

Composition(複合)語法:

這裏寫圖片描述

Composition(複合)的圖形表現方式

這裏寫圖片描述
黑色表示有東西,前者是容器,它容納了後者。

Composition(複合)的內存方式

這裏寫圖片描述
直觀的理解如下:
這裏寫圖片描述上圖中,在創建dequee類型的c時,系統分配的空間爲40。

Composition(複合)關係下的構造和析構

需要說明的是,外部構造函數先調用內部構造函數,完後,再執行外部構造函數自己的剩餘部分。
這裏寫圖片描述
而外部析構函數先析構自己的獨有的部分,完後,再執行內部析構函數。
這裏寫圖片描述

2、Delegation(委託),Composition by reference(指針相連)

典例:

這裏寫圖片描述

Delegation(委託)的部分特點:

1、A可以在任何有需要的時候調用B,把任務委託給B來做。
2、前者A擁有後者B,A中的所有功能都有B來做。
3、兩者通過指針聯繫,這種聯繫較弱。
4、A與B使用指針相連,二者的生存期不一致。

Delegation(委託)的語法:

這裏寫圖片描述

Delegation(委託)的圖形表現形式

這裏寫圖片描述
空心表示使用的是指針,String擁有StringRep

引申形式:

這裏寫圖片描述
上圖中,三個對象共享一個Hello,n用作記錄對象個數。
如果a想改動Hello,系統會copy一個Hello出來供A來修改,但b,c不變,這一過程叫“copy on write”。

補充:

1.委託的方式非常實用,特有名稱爲Handle/Body(pImpI)
2.指針可以指向不同的實現類,這具有一定彈性,B無論怎樣變動都不會影響A,這一手法又稱“編譯防火牆”,A不用再編譯,只需編譯B。

Inheritance(繼承)is-a

典例:

這裏寫圖片描述

Inheritance(繼承)的特點:

1、繼承有三種方式,即public/private/protected
2、Public繼承中,子類對象含有父類成分。

Inheritance(繼承)語法之一(public):

這裏寫圖片描述

Inheritance(繼承)的圖形表現方式:

這裏寫圖片描述
圖中,_List_node爲_List_node_base的子類
Inheritance(繼承)的存儲方式:
這裏寫圖片描述
說明:子類的對象裏面有父類的成分。
Inheritance(繼承)關係下的構造和析構
這裏寫圖片描述
這裏寫圖片描述

補充:

1、繼承在和虛函數的結合上大放光彩;
2、base class 的dtor必須是virtual,否則會出現undefined behavior——也就是析構由外到內的好行爲。只要class現在或將來可能成爲父類,就要把class設爲virtual.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章