延續上述範例
- Fraction.h
... -(Fraction*) initNumerator: (int) n OtherParameter1: (int) p1; ...
- Fraction.m
... -(Fraction*) initNumerator: (int) n OtherParameter1: (int) p1 { self = [super init]; if ( self ) { [self setNumerator: n andDenominator: d]; } return self; } ...
- main.m
#import <stdio.h> #import "Fraction.h" int main( int argc, const char *argv[] ) { // create a new instance Fraction *frac = [[Fraction alloc] init]; Fraction *frac2 = [[Fraction alloc] init]; Fraction *frac3 = [[Fraction alloc] initNumerator: 5 OtherParameter1: 10]; // set the values [frac setNumerator: 5]; [frac setDenominator: 10]; // combined set [frac2 setNumerator: 5 andDenominator: 10]; // print it printf( "The fraction is: " ); [frac print]; printf( "\n" ); printf( "Fraction 2 is: " ); [frac2 print]; printf( "\n" ); printf( "Fraction 3 is: " ); [frac3 print]; printf( "\n" ); // free memory [frac release]; [frac2 release]; [frac3 release]; return 0; }
- output
The fraction is: 1/3 Fraction 2 is: 1/5 Fraction 3 is: 3/10
- @interface 裡的宣告就如同正常的函式。
- @implementation 使用了一個新的關鍵字:super
- 如同 Java,Objective-C 只有一個 parent class(父類別)。
- 使用 [super init] 來存取 Super constructor,這個動作需要適當的繼承設計。
- 你將這個動作回傳的 instance 指派給另一新個關鍵字:self。Self 很像 C++ 與 Java 的 this 指標。
- if ( self ) 跟 ( self != nil ) 一樣,是為了確定 super constructor 成功傳回了一個新物件。nil 是 Objective-C 用來表達 C/C++ 中 NULL 的方式,可以引入 NSObject 來取得。
- 當你初始化變數以後,你用傳回 self 的方式來傳回自己的位址。
- 預設的建構子是 -(id) init。
- 技術上來說,Objective-C 中的建構子就是一個 "init" method,而不像 C++ 與 Java 有特殊的結構。
沒有留言:
張貼留言