Dプログラミング-継承

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

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

継承のアイデアは、関係を実装します。たとえば、哺乳類IS-A動物、犬IS-A哺乳類、したがって犬IS-A動物などです。

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

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

class derived-class: base-class

基本クラスを検討する Shape およびその派生クラス Rectangle 次のように-

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

アクセス制御と継承

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

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

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

マルチレベルの継承

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

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