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