2011年7月19日 星期二

Object-C 牛刀小試[ 建立 Class, 建構子(Constructors)]

延續上述範例
  • 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 有特殊的結構。

沒有留言:

張貼留言