クラス定義 継承
継承関係です。この辺の感覚はC++とさほど変わりませんね。むしろシンプルです。
#import <stdio.h> #import <Foundation/NSObject.h> @interface Foo : NSObject { // インスタンス変数宣言部 int a,b; } - (id) init; - (void) set_a: (int) n; - (void) set_b: (int) n; - (void) add; @end @implementation Foo // NSObjectの初期化メソッドのオーバーライド - (id) init { // スーパークラスのinit呼び出し self = [super init]; if ( self != nil ) { a = 1; b = 1; } return self; } - (void) set_a: (int) n { a = n; } - (void) set_b: (int) n { b = n; } - (void) add { int c = a + b; printf("add %d\n", c); } @end int main () { id obj = [[Foo alloc] init]; [obj add]; [obj set_a:2]; [obj set_b:6]; [obj add]; }
NSObjectにinitメソッドがあるみたいなのでFooでも初期化が必要な場合はオーバーライドするといいみたいです。
スーパークラスのメソッド呼び出しはsuperという変数でできるみたいですね。
selfという自分自身のオブジェクトを表す(おそらくNSObjectの)インスタンス変数があるのでnilかどうか判定し、インスタンス化が正常に行われたかをチェックする模様です。
initは自動で呼び出される訳じゃないみたいなのでalloc呼び出し時に続けて呼び出すのが多分決まり事なのかな?まぁその辺は追々調べていく事にしよう。