2009年6月11日木曜日

Visual C++(C++/CLI)

あれやこれやと今、VisualC++でC++/CLIのことを
まとめています。

やはり、標準C++の構文とは大分違いますね。
オブジェクト指向の内容に合わせて覚えると良いと思います。


クラス宣言
ref class Animal

refがつきます。WindowsFormアプリケーションでFormのソースを見ても
refがついています。

インスタンスを作るときはnew でなく gcnew
また、インスタンスに対応した変数はハンドル変数になります。

例えば、

Animal^ animal = gcnew Animal();

となります。ちなみに、newに対応してdeleteが標準C++にはありますが、
C++/CLIにはありません。ガベージコレクションがやってくれます。
Javaと同じです。

つまり、基本データ型は何も変わりませんが、参照型はハンドルになります。
これも2種類のポインタが存在したためです。

カプセル化
C++/CLIではプロパティを使います。

ref class Animal
{
private: String^ _name;
public: property String^ name
{
String^ get()
{
return _name;
}
void set(String^ value)
{
_name = name;
}
}

とこんな感じです。インスタンス変数をプライベートにして外から使えないようにして、
公開されているプロパティを利用させるということです。
やっていることはJavaのアクセサメソッドと同じ感じです。

継承。これは、標準C++と同じです。
抽象クラス
使う言葉は、abstractでJavaと変わりはないのですが、
記述位置がことなります。

java: abstract class Animal
C++/CLI: ref class Animal abstract

オーバーライド
する方、される方ともに
virtualが付きますが、オーバーライドするときは
overrideがつきます。

インターフェイス
public interface class I~

classの前にinterfaceが付きます。
インターフェイスの中ではメソッドの定義だけ。
加えて、virtualがつきます。

インターフェイスを実装するクラスでは、C++と同じで
クラス名の後にコロンを書いてそのあとにインターフェイス名を書きます。
実装しなければならないメソッドには
virtualは要りますがoverrideは要りません。

いろいろですね。

0 コメント: