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