検索
  • サインイン
  • サインアップ
パスワードのリセットが成功しました

興味のあるプロジェクトをフォローし、それらに関する最新ニュースをチェックしてください

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
🎜
ホットAIツール
Undress AI Tool
Undress AI Tool

脱衣画像を無料で

AI Clothes Remover
AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undresser.AI Undress
Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

Stock Market GPT
Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

人気のツール
メモ帳++7.3.1
メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版
SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6
ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版
SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)