C ++の継承

オブジェクト指向プログラミングで最も重要な概念の1つは、継承の概念です。継承により、別のクラスの観点からクラスを定義できるため、アプリケーションの作成と保守が容易になります。これは、コード機能と迅速な実装時間を再利用する機会も提供します。

クラスを作成するとき、プログラマーは、完全に新しいデータメンバーとメンバー関数を作成する代わりに、新しいクラスが既存のクラスのメンバーを継承するように指定できます。この既存のクラスは、base クラス、および新しいクラスはと呼ばれます derived クラス。

継承のアイデアは、 is a関係。たとえば、哺乳類IS-A動物、犬IS-A哺乳類、したがって犬IS-A動物などです。

基本クラスと派生クラス

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

class derived-class: access-specifier base-class

access-specifierが次のいずれかである場合 public, protected, または private、およびbase-classは、以前に定義されたクラスの名前です。アクセス指定子が使用されていない場合、デフォルトではプライベートです。

基本クラスを検討する Shape およびその派生クラス Rectangle 次のように-

#include <iostream>
 
using namespace std;

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

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

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

   // Print the area of the object.
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

上記のコードをコンパイルして実行すると、次の結果が得られます。

Total area: 35

アクセス制御と継承

派生クラスは、その基本クラスのすべての非プライベートメンバーにアクセスできます。したがって、派生クラスのメンバー関数にアクセスできない基本クラスのメンバーは、基本クラスでプライベートとして宣言する必要があります。

次の方法でアクセスできるユーザーに応じて、さまざまなアクセスタイプを要約できます。

アクセス 公衆 保護 民間
同階級 はい はい はい
派生クラス はい はい 番号
クラス外 はい 番号 番号

派生クラスは、次の例外を除いて、すべての基本クラスメソッドを継承します-

  • 基本クラスのコンストラクタ、デストラクタ、およびコピーコンストラクタ。
  • 基本クラスのオーバーロードされた演算子。
  • 基本クラスのフレンド機能。

継承の種類

基本クラスからクラスを派生させる場合、基本クラスは public, protected または private継承。継承のタイプは、上で説明したようにアクセス指定子によって指定されます。

ほとんど使用しません protected または private 継承、しかし public継承が一般的に使用されます。異なるタイプの継承を使用している間、次のルールが適用されます-

  • Public Inheritance −からクラスを導出する場合 public 基本クラス、 public 基本クラスのメンバーは public 派生クラスのメンバーと protected 基本クラスのメンバーは protected派生クラスのメンバー。基本クラスのprivate メンバーは、派生クラスから直接アクセスすることはできませんが、への呼び出しを介してアクセスできます。 public そして protected 基本クラスのメンバー。

  • Protected Inheritance −から派生する場合 protected 基本クラス、 public そして protected 基本クラスのメンバーは protected 派生クラスのメンバー。

  • Private Inheritance −から派生する場合 private 基本クラス、 public そして protected 基本クラスのメンバーは private 派生クラスのメンバー。

多重継承

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

class derived-class: access baseA, access baseB....

アクセスが1つである場所 public, protected, または privateそして、すべての基本クラスに与えられ、上記のようにコンマで区切られます。次の例を試してみましょう-

#include <iostream>
 
using namespace std;

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

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

// Derived class
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();
   
   // Print the area of the object.
   cout << "Total area: " << Rect.getArea() << endl;

   // Print the total cost of painting
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;

   return 0;
}

上記のコードをコンパイルして実行すると、次の結果が得られます。

Total area: 35
Total paint cost: $2450