クラス定義 継承

継承関係です。この辺の感覚は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呼び出し時に続けて呼び出すのが多分決まり事なのかな?まぁその辺は追々調べていく事にしよう。