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
🎜|