D-programming-inheritance

提供:Dev Guides
移動先:案内検索

Dプログラミング-継承

オブジェクト指向プログラミングで最も重要な概念の1つは継承です。 継承により、別のクラスの観点からクラスを定義できるため、アプリケーションの作成と保守が容易になります。 これにより、コード機能を再利用して実装時間を短縮することもできます。

クラスを作成するとき、プログラマは完全に新しいデータメンバーとメンバー関数を記述する代わりに、新しいクラスが既存のクラスのメンバーを継承するように指定できます。 この既存のクラスは base クラスと呼ばれ、新しいクラスは derived クラスと呼ばれます。

継承の概念は、関係です。 たとえば、哺乳類IS-A動物、犬IS-A哺乳類、したがって犬IS-A動物などです。

Dの基本クラスと派生クラス

クラスは複数のクラスから派生できます。つまり、複数の基本クラスからデータと関数を継承できます。 派生クラスを定義するには、クラス派生リストを使用して基本クラスを指定します。 クラス派生リストは、1つまたは複数のベースクラスに名前を付け、形式があります-

class derived-class: base-class

次のように基本クラス*形状*とその派生クラス*長方形*を考えてください-

import std.stdio;

//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: Shape {
   public:
      int getArea() {
         return (width * height);
      }
}

void main() {
   Rectangle Rect = new Rectangle();

   Rect.setWidth(5);
   Rect.setHeight(7);

  //Print the area of the object.
   writeln("Total area: ", Rect.getArea());
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Total area: 35

アクセス制御と継承

派生クラスは、その基本クラスのすべての非プライベートメンバーにアクセスできます。 したがって、派生クラスのメンバー関数にアクセスできないはずの基本クラスメンバーは、基本クラスでprivateとして宣言する必要があります。

派生クラスは、次の例外を除いてすべての基本クラスのメソッドを継承します-

  • 基本クラスのコンストラクタ、デストラクタ、およびコピーコンストラクタ。 *基本クラスのオーバーロードされた演算子。

マルチレベル継承

継承は複数レベルにすることができ、次の例に示します。

import std.stdio;

//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: Shape {
   public:
      int getArea() {
         return (width* height);
      }
}

class Square: Rectangle {
   this(int side) {
      this.setWidth(side);
      this.setHeight(side);
   }
}

void main() {
   Square square = new Square(13);

  //Print the area of the object.
   writeln("Total area: ", square.getArea());
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Total area: 169