典型的類別設計如下
// 介面區段 @interface ClassName : ParentClassName // 屬性與方法的內容 @end // 實作區段 @implementation ClassName // 方法的內容 @end // 程式區段 int main() { // 如何使用與執行 ClassName } |
也就是說,具有類別的程式需要三個區段,其一為介面區段,由指令 @interface 開始,到指令 @end 結束,其二為實作區段,由另一個指令 @implementation 開始,同樣到下方的 @end 結束,最後則是程式區段,就是 main() 函數 (function) 的地方,在 main() 中定義如何使用與執行自行定義的類別。
舉一例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #import <Foundation/Foundation.h> // 介面區段 @interface Demo : NSObject { int a; int b; } - ( int ) a; - ( int ) b; - ( id ) setA : ( int ) pa; - ( id ) setB : ( int ) pb; - ( int ) do_something; @end // 實作區段 @implementation Demo - ( int ) a { return a; } - ( int ) b { return b; } - ( id ) setA : ( int ) pa { a = pa; return self ; } - ( id ) setB : ( int ) pb { b = pb; return self ; } - ( int ) do_something { return a + b; } @end // 程式區段 int main ( int argc, const char * argv[]) { NSAutoreleasePool * pool = [[ NSAutoreleasePool alloc ] init ]; Demo *demo = [[ Demo alloc ] init ]; [demo setA : 11 ]; [demo setB : 22 ]; NSLog( @"a = %d, b = %d" , [demo a ], [demo b ]); NSLog( @"a + b = %i" , [demo do_something ]); [pool drain ]; return 0 ; } /* 《程式語言教學誌》的範例程式 檔名:classdemo.m 功能:Objective-c 程式範例 作者:張凱慶 時間:西元 2013 年 4 月 */ |
此例的類別名稱為 Demo ,冒號後面為所繼承的類別, Objective-C 中的類別都是繼承自 Foundation.h 中的 NSObject , NSObject 提供物件基本的屬性及方法
4 | @interface Demo : NSObject |
接著用大括弧圍起來的是宣告屬性,宣告時要標明型態及識別字名稱
5 6 7 8 | { int a; int b; } |
下方則是宣告方法,開頭的減號表示為實體方法,也就是物件可以用的方法,第一個小括弧為方法的回傳值型態,沒有回傳值的發訪要宣告為 void
10 11 12 13 14 | - ( int ) a; - ( int ) b; - ( id ) setA : ( int ) pa; - ( id ) setB : ( int ) pb; - ( int ) do_something; |
注意,這裡的 a 與 b 跟屬性 a 與 b 同名,因為這是 getter 方法,用來取得屬性值,而 setA 與 setB 則是 setter 方法,用來設定屬性值,後面接冒號,其後為參數的型態的識別字名稱。
方法實作方面,有回傳值的方法最後都要有個 return 陳述,用來回傳數值
31 32 33 34 35 | - ( id ) setA : ( int ) pa { a = pa; return self ; } |
NSObject 的 alloc 用來分配記憶體空間, init 用來初始化物件,注意,凡是儲存物件的變數都得用指標 (pointer)
54 | Demo *demo = [[ Demo alloc ] init ]; |
我們可以看到 Objective-C 的訊息傳遞風格,所有的訊息在執行期才會被解讀,像是下面是向 demo 傳遞 do_something
54 | NSLog( @"a + b = %i" , [demo do_something ]); |
由於 do_something 是回傳 a 與 b 的相加值,因此這裡會得到相加的結果。
編譯執行,結果如下

中英文術語對照 | |
---|---|
類別 | class |
物件 | object |
方法 | method |
屬性 | property |
介面 | interface |
實作 | implement |
指標 | pointer |
您可以繼續參考
類別
相關目錄
Objective-C 快速導覽
Objective-C 教材
首頁
參考資料
Programming with Objective-C: About Objective-C
Programming with Objective-C: Working with Objects
沒有留言:
張貼留言