D 프로그래밍-상속
객체 지향 프로그래밍에서 가장 중요한 개념 중 하나는 상속입니다. 상속을 통해 다른 클래스의 관점에서 클래스를 정의 할 수 있으므로 응용 프로그램을 쉽게 만들고 유지 관리 할 수 있습니다. 또한 코드 기능을 재사용 할 수있는 기회와 빠른 구현 시간을 제공합니다.
클래스를 만들 때 완전히 새로운 데이터 멤버와 멤버 함수를 작성하는 대신 프로그래머는 새 클래스가 기존 클래스의 멤버를 상속하도록 지정할 수 있습니다. 이 기존 클래스를base 클래스, 새 클래스는 derived 수업.
상속의 개념은 is a 관계를 구현합니다. 예를 들어, 포유류 IS-A 동물, 개 IS-A 포유류이므로 개 IS-A 동물도 마찬가지입니다.
D의 기본 클래스 및 파생 클래스
클래스는 둘 이상의 클래스에서 파생 될 수 있습니다. 즉, 여러 기본 클래스에서 데이터와 함수를 상속 할 수 있습니다. 파생 클래스를 정의하기 위해 클래스 파생 목록을 사용하여 기본 클래스를 지정합니다. 클래스 파생 목록은 하나 이상의 기본 클래스의 이름을 지정하고 다음과 같은 형식을 갖습니다.
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
액세스 제어 및 상속
파생 클래스는 기본 클래스의 모든 비 전용 멤버에 액세스 할 수 있습니다. 따라서 파생 클래스의 멤버 함수에 액세스 할 수없는 기본 클래스 멤버는 기본 클래스에서 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