クラス

クラスの種類と構造体

区分 キーワード 型の種類 既定の修飾子 C#でのキーワード
クラス ref class 参照型 private class
value class 値型 struct (構造体)
構造体 ref struct 参照型 public なし
value struct 値型 なし
マネージ クラス型の宣言 | MSDN

refやvalueキーワードを省略した場合は、アンマネージドなC++の型となります。

定義

ヘッダ

// MyClass.h

#pragma once

namespace MyNamespace {

    public ref class MyClass
    {
    public:
        void Func();
    };
}

ソース

#include "MyClass.h"

using namespace MyNamespace;

void MyClass::Func()
{
}

オブジェクトの生成

MyClass^ myClass = gcnew MyClass();

オブジェクトの破棄

class classname {
   ~classname() {}  // デストラクタ (destructor)
   ! classname() {} // ファイナライザ (finalizer)
};
デストラクターとファイナライザー - 方法: クラスと構造体を定義および使用する (C++/CLI) | MSDN

C++/CLIではDispose()を呼び出してオブジェクトを破棄することはできず、deleteで破棄します。Dispose()を呼ぶと「C2039 'Dispose': '**' のメンバーではありません。」としてエラーとなります。 winforms - error C2039: 'Dispose' : is not a member of 'System::Windows::Forms::ErrorProvider' - Stack Overflow リソース管理 - C++: .NET Framework プログラミング最良の言語 | MSDN

ref class MyClass
{
    // デストラクタ
    ~MyClass()
    {
        // マネージ リソースの破棄
        this->!MyClass();
    }

    // ファイナライザ
    !MyClass()
    {
        // アンマネージ リソースの破棄
    }
};

int main()
{

    MyClass^ myClass = gcnew MyClass();

    delete myClass; // デストラクタの呼び出し

    // デストラクタを呼ばない場合、ここでファイナライザが呼ばれる
}

破棄の強制

C++/CLIではC#のようにusingステートメントを用いなくともコンパイラによって解釈され、不要になった時点で自動で破棄されます。C++/CLI, Finalize and Dispose - Christian Nagel's Blog - Thinktecture Blog (2006/04/10)

ただしそのオブジェクトをC#で利用する場合には、usingなどで明示的に破棄します。

演算子のオーバーロード (Operator Overloading)

MyClass^ operator + ( int i )
{
    return gcnew MyClass( this->i - i );
}

C++以外の言語からのアクセスを可能とするには、静的な演算子として定義します。ユーザー定義の演算子 (C++/CLI) | MSDN

static MyClass^ operator + ( MyClass^ me, int i )
{
    return ( gcnew MyClass( me->i + i ) );
}

ユーザー定義変換 (User-Defined Conversions : UDC) / 変換演算子 (conversion operators) / キャスト演算子 (cast operators)

static operator String^ ( MyClass^ me )
{
    return me->str;
}

明示的な変換を強制するには、explicitを指定します。

static explicit operator String^ ( MyClass^ me )
{
    return me->str;
}
ユーザー定義変換 (C++/CLI) | MSDN
MSDN (Microsoft Developer Network) から検索