感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

クラスを作って、メソッドを実行してみる。

スポンサーリンク

とりあえずObjective-Cでクラスを作ってみて、intの値をメソッドを通じてセットしてみたけど、うまくセットできていない。
値が渡せていない。

まず、ダメな例はこんな感じ。

@interface Friend : NSObject
{
@public
    NSString *myName;
    int age;
}
@end

@implementation Friend
//インスタンスメソッド
-(int) getAge
{
    
    NSLog(@"hello!");
    return age;
}

-(void) setAge : (int)val
{
    age *= val;
    NSLog(@"ageに値をセットしました:%d",age);
    return;
}

@end


int main (int argc, const char * argv[])
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
    NSString *name = @"海堂尊";
    Friend *friend1 = [[Friend alloc] init];
    
    //NSStringのセッターの作り方はまだわかってない
    friend1->myName = name;
    
    [friend1 setAge:30];
    
    [friend1 getAge];
    NSLog(@"FriendオブジェクトのmyNameの値は%@", friend1->myName);
    NSLog(@"Friendオブジェクトにセットしたageの値は:%d",[friend1 getAge]);

    [pool drain];
    return 0;
}

これを実行しても、

[Switching to process 732 thread 0x0]
2013-10-21 18:03:36.211 mytest[732:903] ageに値をセットしました:0
2013-10-21 18:03:36.217 mytest[732:903] FriendオブジェクトのmyNameの値は海堂尊
2013-10-21 18:03:36.218 mytest[732:903] Friendオブジェクトにセットしたageの値は:0

のように、setAgeメソッドで設定したつもりのintがメソッドを通じて設定されていない。
なぜだろうか?

ためしてみてわかったのだけれど、
上記のsetAgeのところを

-(void) setAge : (int)val
{
    age = val;
}

のように変えれば、ちゃんとintをセットできた。
何がダメだったかというと、*をつけた「参照」を渡していたからダメだったんだろう。
で、この参照とか*の詳細は、もうちょっと詳しく勉強していって、これからこのブログに記事を書いていく予定だ。