value class のプログラム

C++/CLI で作成した value class のサンプルプログラムです。
value class はコピーが渡されることを除けば ref class と同じようにプログラム出来ます。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. value class を使って簡単なプログラムを作成してみました。
    #define SAFE_DELETE(p) は Object Class を開放するための定義です。
    value class GCM で GCM(最大公約数) を求める class を定義します。
    キーワード「value class」で始まることを除いて ref class をパラメータで渡す と同じです。
    /*★ value class  GCM    前田 稔 ★*/
    #define SAFE_DELETE(p)  { if (p) { delete (p);  (p) = nullptr; } }
    using namespace System;
    
    value class GCM
    {
      private:
        int     w1,w2;
    
      public:
        int gcm(int v1, int v2)
        {
            w1 = v1;
            w2 = v2;
            while(w1 != w2)
            {   if (w1 > w2)    w1-= w2;
                else            w2-= w1;
            }
            return w1;
        }
    };
    
  2. main() 関数です。
    GCM^ pGcm = nullptr; で Object Class のポインタを定義して、gcnew GCM(); で生成します。
    関数 func() のパラメータとして渡すときは pGcm を直接渡します。
    gcnew で生成した領域は delete で開放します。
    C++/CLI では自動的に領域を開放してくれるので delete は必要ないかも知れません。
    System::Console::ReadLine(); は実行画面を確認するために挿入したコードです。
    必要なければ削除して下さい。
    int main()
    {
        GCM^    pGcm = nullptr;
    
        pGcm = gcnew GCM();
        func(pGcm);
        SAFE_DELETE(pGcm);
        System::Console::ReadLine();
        return 0;
    }
    
  3. class GCM をパラメータとして受け取る func() 関数です。
    関数 func() では、受け取った Object Class のメソッドを使って GCM を計算します。
    この関数は ref class をパラメータで渡す と同じです。
    value class でも ref class と同じように実行されることを確かめて下さい。
    void func(GCM^ pGcm)
    {
        Console::WriteLine("24 と 32 の GCM は {0} です", pGcm->gcm(24,32));
    }
    

超初心者のプログラム入門(C/C++)