Objective-C++でクラスを作る 【はじめの一歩】

現在学習中のObective-C++についてのエントリーです。記載した情報が必ず正しいとは限らないことにご留意してお読みください。「間違ってるよ!」等の突っ込み大歓迎です。(突っ込みはコメント欄にお願いします。)


上記クラスをObjective-C++で書くと、以下のようになる。

Rectangle.h

@interface Rectangle : NSObject {
@private
	int width;
	int height;
}

-(int)getArea;

@end

Rectangle.mm

#import "Rectangle.h"

@implementation Rectangle

-(int)getArea
{
	int area = width * height;
	return area;
}

@end

上記コードに対する小生の愚にもつかない雑感を、以下につらつらと記させていただく。

キーワード「interface」

「クラス」といいつつ、キーワードとしては「interface」を用いている。何かしら歴史的背景があるのではないか、と小生は読んでいるが、真実はいかに!?(C++のキーワード「class」とバッティングさせたくなかったのか?でも、「private」は使っているしなぁ。うむむ。。。)

NSObject

『Javaのクラスは、全て「java.lang.Object」のサブクラスである』というルールと同じように、Objective-C++も、『「NSObject」のサブクラスとする』決まりのようだ。ただし、Javaとは異なり、Objective-C++では明示的な指定が必要。(とはいえ、IDEであるxCode氏が勝手にコードを吐いてくれるので、通常、プログラマが記述する必要はない)。

ちなみに、「NSObject」のためにimportすべきヘッダは、プロジェクトの種類によって異なる模様。これまで小生はiPhone用のプロジェクトしか作ったことがなかったが、その場合は、『「Foundation/Foundation.h」のimport文』が自動生成されていた。一方で、本記事を起こすにあたり、初めてMacのコマンドライン用のプロジェクトを作成してみたが、すると、『「Cocoa/Cocoa.h」のimport文』が自動生成された。

頻出する「@」が可愛らしい。キュートである。この「マーク」により、「C言語/C++」も交えながらプログラミングできるというObjective-C++の特徴を実現している模様。おそらくは、Objective-C++のコンパイラ氏は、「@」を頼りに、読み込んだいるコードが「Objective-C++」なのか、「C言語/C++」なのか、といった情報を判定しているのであろう。

ヘッダファイル/ソースファイル

「定義」と「実装」を異なるファイルに分離するというルールからは、「C言語/C++」文化圏の香が感じられる。

import

『include』ではなく『import』であるおかげであろうか、「C言語/C++」文化言圏では必須のインクルードガードは要らない模様。この点については「Java」文化圏の方々には馴染みがあろう。

■続く■

Objective-C++で作って、話して、壊すに続きます。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中