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