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 件のコメント:
コメントを投稿