C ++の継承
オブジェクト指向プログラミングは、最も重要なコンセプトは継承されています。 継承は、より簡単にアプリケーションを作成し、維持することになり、別のクラスごとにクラスを定義することを可能にします。 そうするために、またコードの機能の再利用に達し、実行時間の結果を改善します。
あなたはクラスを作成するときは、単に新しいクラスをすることができ、クラスの既存のメンバーを継承指定し、データメンバとメンバ関数新たに再記述する必要はありません。 既存のクラスは基底クラスと呼ばれる、新しいクラスは、派生クラスと呼ばれています。
継承は関係の代表です 。 例えば、哺乳動物は、犬は、哺乳動物は、したがって、犬のように動物であり、であり、です。
&派生クラスの基底クラス
このクラスは、複数の基底クラスからのデータと機能を継承することができることを意味し、複数のクラスから派生することができます。 私たちは、基本クラスを指定するには、派生クラスのリストを使用して、派生クラスを定義します。 以下のフォームという名前の1つ以上のベースクラスへのクラスの派生リスト:
class derived-class: access-specifier base-class
アクセス修飾子アクセス指定子は、公共の保護またはプライベート 1であり、ベース・クラスは、クラス名の前に定義されています。 アクセス修飾子なしのアクセス指定子場合、デフォルトはprivateです。
以下のように、その派生クラスを長方形、あなたは、基本クラスの形を持っていると仮定します。
#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 |
---|---|---|---|
同一个类 | yes | yes | yes |
派生类 | yes | yes | no |
外部的类 | yes | no | no |
派生クラスでは、次の状況を除いて、すべての基本クラスのメソッドを継承します。
- 基底クラスのコンストラクタとデストラクタとコピーコンストラクタ。
- 基本クラスのオーバーロードされた演算子。
- 基本クラスの機能の友人。
継承の種類
クラスは、ベースクラスから派生された場合、基底クラスは、公開、保護またはプライベート型として継承することができます。上記の説明を介して指定するアクセス修飾子のアクセス指定子のタイプを継承します。
私たちは、ほとんどの保護やプライベート継承は通常、パブリック継承を使用されている使用します。継承の異なるタイプの場合には、次の規則に従います。
- 公開継承(パブリック): 保護されたメンバークラスは、 公開基底クラスから派生し、基本クラスのパブリックメンバは、クラスのパブリックメンバを派生され、基本クラスの保護されたメンバーは、派生クラスで、基底クラスのprivateメンバーが直接導出することはできませんクラスアクセスは、しかし、基底クラスのpublicおよびprotectedメンバーを呼び出すことによってアクセスすることができます。
- (保護)保護継承:基本クラスの保護から派生したクラスは、基底クラスのpublicおよびprotectedメンバーは、派生クラスのprotectedメンバになります。
- プライベート継承(プライベート):クラスは基本クラスから派生した場合、基本クラスのプライベート、パブリック 、および保護されたメンバーは、派生クラスのprivateメンバーになります。
多重継承
、サブクラスで多重継承は、複数の親クラスの特性を継承する複数の親クラスを持つことができます。
C ++クラスが複数のクラスのメンバから次の構文を継承することができます。
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,… { <派生类类体> };
アクセス修飾子の継承が保護またはプライベート1、パブリックである、上記に示したように、各基本クラス、カンマで区切られたそれぞれの間の基本クラスを飾るために使用されます。今、私たちは次の例を見てみましょう:
#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: $2450