2012-02-26 35 views
0

第一個問題在這裏,我四處搜索,恐怕我不知道我正在嘗試做什麼確切的術語 - 請不要'如果它已經被詢問,就不會攻擊我。指向正確的方向,我會閱讀。Objective-C,難以正確地繼承ivars到子類和方法

我有類別:
「形狀」(中NSObject的)的「形狀」
子類包括:
「圓」等 - 每個具有其各自的油杉(計算區域)的方法。

我的子類工作帶來極大的個人獲得一流的「圈」來設置實例變量(在「形狀」使用「形狀」的方法和繼承它們,然後使用這些計算面積

我想要做什麼。 我希望能夠爲「Shape」對象設置參數,然後我希望這些參數能夠滴流到每個子類(「Circle」,「Triangle」等),這樣我可以輸入兩個參數,計算每個子類的所有面積和周長,每個子類方法都是相同的「calcArea」,例如:


理論:
-Brute通過在我的主要方法中使用2個變量來重置每個子類的每個參數。 這看起來效率很低,但是很有效。

-using「id」,基本上使這個對象通過每個子類在「Shape」中創建參數,然後遍歷每個子類直到所有子類都完成。嘗試了幾件事,無法弄清楚。

- 在「形狀」中創建一個對象,然後執行其子類的每個功能 - 這聽起來很糟糕,超類不應該知道他們的子類是什麼......我可以創建一個方法在執行[myCircle calcArea]和[myTriangle calcArea]的「Shape」中?

- 我正在設計這個程序是錯誤的。


在此先感謝您的幫助!

回答

1

如果我理解正確。在OOP子類中繼承其超類的所有屬性。所以當你有:

@interface Shape : NSObject { 
    int _mParam; 
} 
-(int) calcArea; 
@end 

你可以在你的子類中實際訪問_mParam。然後創建子類:

@interface Circle : Shape { 
} 
-(id) init:(int) param; 
-(int) calcArea; 
@end 

-(id) init:(int) param { 
    .... 
    _mParam = param; 
    .... 
} 

-(int) calcArea { 
    //some calculations here 
    return M_PI*r*r + _mParam; 
} 
+0

所以如果我正確理解你,我可以在SuperClass中創建方法,然後實際定義並在超類中啓動它。 - 這對我來說非常合理,但在這種情況下,身份證是如何工作的? 它似乎是啓動與「參數」作爲變量正確的類?但是如何在主函數中編碼呢? – thattookawhile 2012-02-26 22:08:24

+0

id是指向對象內部結構的指針。您根本不應該擔心id - 它由運行時系統在內部使用。 – Max 2012-02-26 22:10:06

+0

主要功能是什麼? – Max 2012-02-26 22:10:31