我接下來所要講得是復合
帶著問題學習會快一點
什么是復合? 有什么優點?什么時候用復合?什么是依賴關系?如何解決?
復合就是將一些個體組件組合起來形成一個整體。(一個類定義另一個類作為實例變量)
優點:
1.將其他對象引用到新創建的對象中,形成新的整體,功能更加強大。
2.耦合度較小(相對于繼承)
繼承是“is a”是一個,復合是“has a”有一個,比如電腦有一個鍵盤,汽車有一個引擎等等就可以用復合
依賴關系:一個類和另一個類或多個類之間的關系
比如A.h文件導入B.h文件,B.h文件導入C.h文件,這樣三個文件之間就建立一種關聯
如果C.h文件新增加一個實例變量,那么B.h,A.h文件則會重新編譯來接受這個變化,這就是依賴關系
用@class代替#import,@class是告訴編譯器這就是一個類可以放心使用,編譯器不需要知道這個類里面的內容,而是只要知道它是一個類,可以通過指針來引用
下面我們來通過一個實例來了解復合具體該怎么用
舉一個汽車類,汽車(Car)、引擎(Engine)、輪胎(Tire),使用復合完成一輛汽車的裝配
創建一個工程,main函數不動它,建立Engine類
.h文件不動它


創建Tire類

跟引擎類一樣

創建汽車類
在這里就使用到了@class,把引擎類和輪胎類看做是實例變量,不用調用類里面的東西就可以用@class否則還要用#import
這里就組裝汽車

在Car.m文件實例化

在main函數里面實現輸出

這只是很淺顯的復合例子,如果想深入讀者可以自己去寫,比如有汽車的四個輪胎都有自己不同的位置,當訪問汽車上某個輪胎時也要指定這個輪胎的具體位置才可以,所以在Car里面還要重寫setTire:(Tire*)newTire andIndex:(int )index 帶有索引的setter 方法,同樣也要添加帶有索引的getter方法,需要注意的要添加 if 判斷輪胎取值的范圍。
新聞熱點
疑難解答