class を継承します

C++/CLI で GCM class を継承(inheritance)して LCM class を作成します。

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

プログラムの説明

  1. ソースプログラムです。
    ファイル名 説明
    Lcm.cpp class を継承
  2. C++/CLI では Class を継承(inheritance)して新しい Class を作成することが出来ます。
    インヘリタンス(inheritance)とは、「相続」「継承」「相続財産」「継承物」などという意味の英語です。
  3. 継承元となる GCM Class の定義です。
    説明は Object Class(ref class) を参照して下さい。
    using namespace System;
    
    //☆GCM Class の定義
    ref 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;
        }
    };
    
  4. GCM Class を継承する LCM Class の定義です。
    : public GCM で GCM Class を継承します。
    //☆LCM Class の定義
    ref class   LCM : public GCM
    {
      public:
        int Lcm(int v1, int v2)
        {
            return v1*v2/Gcm(v1,v2);
        }
    };
    
  5. main() 関数です。
    最初に GCM Object Class を使って、GCM を計算します。
    次に LCM Object Class を使って、GCM と LCM を計算します。
    LCM Object Class では GCM Class を継承しているので、GCM Class で定義されている Gcm() 関数も使うことが出来ます。
    //★ main
    void main(void)
    {   GCM^    gcm;
        LCM^    lcm;
    
        gcm = gcnew GCM();
        Console::WriteLine("GCM Object Class を使います");
        Console::WriteLine("24 と 32 の GCM は {0} です", gcm->Gcm(24,32));
        delete gcm;
    
        Console::WriteLine("\nLCM Object Class を使います");
        lcm = gcnew LCM();
        Console::WriteLine("24 と 32 の GCM は {0} で、LCM は {1} です", lcm->Gcm(24,32), lcm->Lcm(24,32));
        delete lcm;
        System::Console::ReadLine();
    }
    
  6. クラスを継承したプログラムの例は、次のページを参照して下さい。
    GSPRITE Class を継承して美人のアニメーション
    同心円状に広がるように弾を一斉に発射
  7. クラスを継承するには、次のように書きます。
    導出クラスとは新しく作るクラスのことで、基本クラスとは継承元のクラスのことです。
    基本クラスをスーパークラス、導出クラス(派生クラス)をサブクラスと呼ぶこともあります。
    導出クラス:アクセスコントロール 基本クラス {...};
    アクセスコントロールには、public, private, protected のいずれかを書きます。
    ややこしく考えないで当面は public を使って下さい。
    1. public を指定すると継承元が protected なら継承先も protected に、継承元が public なら継承先も public です。
    2. private を指定すると継承元が protected なら継承先は private に、継承元が public なら継承先は private です。
    3. protected を指定すると継承元が protected なら継承先は protected に、継承元が public なら継承先は protected です。
    4. 継承元が private であれば継承先からはアクセスできません。
  8. protected というアクセスコントロールが出できましたがこれは、クラス内のメンバ関数が、継承先のメンバ関数からしかアクセスできないという意味です。
    継承先のクラスには、継承元のクラスのメンバがそっくり含まれます。
    それに加えて、継承先でメンバを新しく加えることができます。
    private と protected は似ていて紛らわしいのですが、次のようになっています。

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