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