オブジェクト指向プログラミングで最も重要な概念の1つは、継承です。継承により、別のクラスに基づいてクラスを定義できるため、アプリケーションの作成と保守が容易になります。そうすることで、コード関数を再利用し、実行効率を向上させる効果も得られます。
クラスを作成するときに、新しいデータメンバーやメンバー関数を書き換える必要はありません。新しく作成したクラスが既存のクラスのメンバーを継承するように指定するだけです。この既存のクラスは基本クラスと呼ばれ、新しく作成されたクラスは派生クラスと呼ばれます。
継承は、 関係を表し ます。たとえば、哺乳類は動物であり、犬は哺乳類であるため、犬は動物であるというようになります。
C / C ++ラーニングスカート[7、12、2、84、705]、初心者でも上級者でも、転職したいのか、キャリアを始めたいのか、一緒に理解して学ぶことができます!スカートには開発ツールがあり、乾物や技術情報をたくさん共有できます!
コードは次のように表示されます。
// 基类
class Dog : public Animal {...};
//派生类
class Animal {
// eat() 函数
// sleep() 函数
};
class Dog : public Animal {
// bark() 函数
};
基本クラスと派生クラス
クラスは複数のクラスから派生させることができます。つまり、複数の基本クラスからデータと関数を継承できます。派生クラスを定義するには、クラス派生リストを使用して基本クラスを指定します。クラス派生リストは、次の形式の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として継承できます 。継承タイプは、上記で説明したアクセス指定子によって指定されます。
保護された 継承 や プライベート継承、通常はパブリック 継承は ほとんど使用しません 。さまざまなタイプの継承を使用する場合は、次のルールに従ってください。
- 公共の継承(パブリック):クラスが由来する場合、公開基底クラス、基本クラスのパブリック派生クラスのメンバーのパブリック基本クラスのメンバーが保護するために、派生クラスのメンバーを保護するために、基本クラスののメンバープライベートメンバーことができます直接派生クラスAccessではありませんが、基本クラスのパブリックメンバーと保護されたメンバーを呼び出すことでアクセスできます。
- 保護された継承(保護された): クラスが基本クラスの保護から派生した場合、基本クラスはパブリックであり、派生クラスのメンバーの保護はメンバーを保護することです。
- プライベート継承(プライベート):クラスがプライベート基本クラスから派生した場合、基本クラスpublicおよび派生クラスのメンバーの保護はプライベートメンバーになります。
多重継承
多重継承とは、サブクラスが複数の親クラスを持つことができ、複数の親クラスの特性を継承することを意味します。
C ++クラスは、複数のクラスからメンバーを継承できます。構文は次のとおりです。
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};
その中で、アクセス修飾子の継承メソッドは、 パブリック、プロテクト 、プライベートのいずれかであり 、各基本クラスを変更するために使用され、上記のように、各基本クラスはコンマで区切られます。次に、次の例を見てみましょう。
#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