初投稿。Objective C を学習しようとしています。OOP に関する十分な知識があります。私は C、C++、および Java のバックグラウンドを少し持っていますが、さびています。残念ながら、いくつかの Objective C の概念と構文について理解するのに苦労しています。
compileonline でいくつかのコードを試しています。いくつかのコメントアウトの後、コードが機能するようになりましたが、メソッド宣言がまだコメントアウトされていることに気付きました。initWithNameを参照
#import <Foundation/Foundation.h>
@interface cl_person: NSObject
{
NSString* name;
int age;
}
//-(id)init;
//-(id)initWithName: (NSString*)p_name withAge: (int)p_age;
-(void)display;
@end
@implementation cl_person
/*
-(id)init{
return self;
}*/
-(id)initWithName: (NSString*)p_name{
//self = [self init];
name = p_name;
return self;
}
-(id)initWithName: (NSString*)p_name withAge: (int)p_age{
self = [self initWithName: p_name];
age = p_age;
return self;
}
-(void)display{
printf("My name is %s and I am %d years old.", [name UTF8String], age);
}
@end
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
cl_person *o_person = [[cl_person alloc] initWithName: @"Dick" withAge: 25];
[o_person display];
[o_person release];
//NSLog (@"hello world");
[pool drain];
return 0;
}
- (id)initWithName は NSObject のメソッドだと思いますので、直接実装することはスーパークラスのメソッドをオーバーライドすることを意味します。私は正しいですか?
- Apple dev docs によると、セレクターは Method signature の一部です。入力タイプとその順序は言うまでもありませんが、この例のいくつかの点で混乱します。宣言されていないのに、selector withAge を使用してメソッドを実装できるのはなぜですか?
これがすでに他の場所でカバーされている場合はお詫び申し上げます。私は簡単な検索を行い、関連する可能性のあるいくつかのヒットを閲覧しましたが、何も役に立ちませんでした. ありがとう!
[NSTotalNoob リリース];