2009-06-17

Objective-C のメソッドは virtual か?

Objective-C のメソッドは C++ でいうところの virtual なのだろうか?

#include <stdio.h>
#import <objc/Object.h>

@interface B : Object
- (void)speak;
@end

@implementation B
- (void)speak
{
    printf("speak B\n");
}
@end

@interface D : B
- (void)speak;
@end

@implementation D
- (void)speak
{
    printf("speak D\n");
}
@end

int
main()
{
    B *b = [[D alloc] init];
    [b speak];
    return 0;
}

をコンパイル,実行すると speak D と表示されるので,答えは "Yes" である.

このサンプルコードを書く時にうまくいかなかったこと

alloc の呼び出しが undefined になる.

これは以下のように解決できる.

  • B を Object から派生させる.そのためには #import <objc/Object.h> が必要になる.
  • -lobjc で objc ライブラリをリンクする.

これらは Objective-C の環境では標準なのだろうか?

0 件のコメント:

コメントを投稿