C++の継承


オブジェクト指向プログラミングで最も重要な概念の 1 つは継承です。継承を使用すると、別のクラスに基づいてクラスを定義できるため、アプリケーションの作成と保守が容易になります。これにより、コード関数の再利用と実行時間の向上という効果も得られます。

クラスを作成するときに、新しいデータ メンバーやメンバー関数を書き直す必要はありません。新しいクラスが既存のクラスのメンバーを継承することを指定するだけで済みます。この既存のクラスは基本クラスと呼ばれ、新しいクラスは派生クラスと呼ばれます。

継承は 関係であることを表します。たとえば、哺乳類は動物であり、犬も哺乳類であり、したがって犬も動物である、というようになります。

基本クラスと派生クラス

クラスは複数のクラスから派生できます。つまり、複数の基本クラスからデータと関数を継承できます。派生クラスを定義するには、クラス派生リストを使用して基本クラスを指定します。クラス派生リストは 1 つ以上の基本クラスにちなんで名付けられ、次の形式になります:

class derived-class: access-specifier base-class

ここで、アクセス修飾子 access-specifier は public、protected、または private のいずれかであり、base-class は以前に定義されたクラスの名前。 access-specifier が使用されない場合、デフォルトは private です。

基底クラス Shape があり、以下に示すように Rectangle がその派生クラスであるとします。

#include <iostream>
 
using namespace std;

// 基类
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 派生类
class Rectangle: public Shape
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

上記のコードがコンパイルされて実行されると、次の結果が生成されます:

Total area: 35

アクセス制御と継承

派生クラスは、基本クラス内のすべての非プライベート メンバーにアクセスできます。したがって、基底クラスのメンバーが派生クラスのメンバー関数からアクセスされることを望まない場合は、基底クラスでプライベートと宣言する必要があります。

アクセス権限に基づいて、さまざまなアクセス タイプを次のように要約できます。

派生クラスはいはいいいえ外部クラスはいいいえいいえ

派生クラスは、次の場合を除き、すべての基本クラスのメソッドを継承します:

  • 基本クラスのコンストラクター、デストラクター、およびコピー コンストラクター。

  • 基本クラスのオーバーロードされた演算子。

  • 基本クラスのフレンド関数。

継承型

クラスが基本クラスから派生する場合、基本クラスはpublic、protected、または privateとして継承できます。継承型は、上で説明したアクセス指定子によって指定されます。

protected private 継承を使用することはほとんどなく、通常は public 継承を使用します。さまざまなタイプの継承を使用する場合は、次の規則に従ってください:

  • パブリック継承 (パブリック): クラスが public基本クラスから派生する場合、基本クラスの publicメンバーも の派生クラスパブリックメンバー、基本クラスの保護されたメンバーは、派生クラスの保護されたメンバーでもあり、基本クラスのプライベートメンバーは、派生クラスから直接アクセスすることはできませんが、呼び出しによってアクセスできます基本クラスの public メンバーと protected

    メンバーがアクセスします。
  • 保護された継承: クラスが protected 基本クラスから派生する場合、基本クラスの public メンバーと protected メンバーは、派生クラスの protected

    メンバーになります。
  • プライベート継承 (プライベート): クラスが private基本クラスから派生する場合、基本クラスの public メンバーと protected メンバーは、派生クラスの private

    メンバーになります。

多重継承

多重継承とは、サブクラスが複数の親クラスを持つことができ、複数の親クラスの特性を継承することを意味します。

C++ クラスは複数のクラスからメンバーを継承できます。構文は次のとおりです:

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};
このうち、アクセス修飾子の継承メソッドは public、protected、または private

のいずれかであり、各基本クラスを変更するために使用されます。上に示すように、カンマで区切ってください。次に、次の例を見てみましょう:

#include <iostream>
 
using namespace std;

// 基类 Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 基类 PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return area * 70;
      }
};

// 派生类
class Rectangle: public Shape, public PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
   int area;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   area = Rect.getArea();
   
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   // 输出总花费
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;

   return 0;
}

上記のコードがコンパイルされて実行されると、次の結果が生成されます:
Total area: 35
Total paint cost: 50
🎜