インターフェース部を クラス名.h でヘッダファイルとして、実装クラスを クラス名.m とするのが一般的らしい。
クラス名.m には クラス名.h を import する。
別の実装を各場合も クラス名.h を import すればおk。
main.h 内は main だけ残して、Helloクラスを別ファイルにする
main から import するのは クラス名.h だけでおk。何でだろう?同クラス名をデフォの実装として読み込んでくれる?
Hello.h
#import
@interface Hello : NSDocument {
int val;
int min,max,step;
}
- (id)initWithMin:(int)a max:(int)b step:(int)s;
- (int)value;
- (id)up;
- (id)down;
@end
Hello.m
#import "Hello.h"
@implementation Hello
- (id)initWithMin:(int)a max:(int)b step:(int)s {
self=[super init]; // NSObjectの初期化を呼ぶ
if(self!=nil) { // nilはnullみたいなもん? init が成功していたら
val=min=a;
max=b;
step=s;
}
return self;
}
- (int)value {
return val;
}
- (id)up {
if((val += step) > max) val=max;
return self;
}
- (id)down {
if((val -= step) < min) val=min;
return self;
}
@end
main.m
#import
#import "Hello.h"
int main(void)
{
id v,w;
v=[[Hello alloc] initWithMin:0 max:10 step:2];
w=[[Hello alloc] initWithMin:0 max:9 step:3];
[v up];
printf("%d %d\n",[v value], [w value]);
[v up];
[w up];
printf("%d %d\n",[v value], [w value]);
return 0;
}
Objective-CだからといってすべてをObject指向で作る必要はない
Object型より関数型の方が軽いため、あきらかな重い処理は関数型で作成した方が良い
関数定義のみを含むソースは .c ファイルとして扱う
ただしオブジェクトを引数や返り値としたり、メソッド呼び出しなどをする場合は .m とする
#import は複数のクラスを読み込んだ場合、かぶるヘッダファイルを読み込まない
#include は読み込む。(通常はヘッダファイル内で2度読み込まないように定義しておく)
2度読み込みたい事情が無い限り #import でおk
今日はここまで!次回はクラス継承
0 件のコメント:
コメントを投稿