Pemrograman D - Warisan

Salah satu konsep terpenting dalam pemrograman berorientasi objek adalah pewarisan. Inheritance memungkinkan untuk mendefinisikan kelas dalam istilah kelas lain, yang membuatnya lebih mudah untuk membuat dan memelihara aplikasi. Ini juga memberikan kesempatan untuk menggunakan kembali fungsionalitas kode dan waktu implementasi yang cepat.

Saat membuat kelas, alih-alih menulis anggota data dan fungsi anggota yang benar-benar baru, pemrogram dapat menetapkan bahwa kelas baru harus mewarisi anggota kelas yang sudah ada. Kelas yang ada ini disebutbase kelas, dan kelas baru disebut sebagai derived kelas.

Ide pewarisan mengimplementasikan adalah hubungan. Misalnya mamalia IS-A binatang, anjing IS-A mamalia maka anjing IS-A binatang begitu juga dan seterusnya.

Kelas Dasar dan Kelas Turunan di D

Sebuah kelas dapat diturunkan dari lebih dari satu kelas, yang berarti ia dapat mewarisi data dan fungsi dari beberapa kelas dasar. Untuk mendefinisikan kelas turunan, kami menggunakan daftar turunan kelas untuk menentukan kelas dasar. Sebuah daftar derivasi kelas menamai satu atau lebih kelas dasar dan memiliki bentuk -

class derived-class: base-class

Pertimbangkan kelas dasar Shape dan kelas turunannya Rectangle sebagai berikut -

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()); 
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Total area: 35

Kontrol Akses dan Warisan

Kelas turunan dapat mengakses semua anggota non-privat dari kelas dasarnya. Jadi anggota kelas dasar yang seharusnya tidak dapat diakses oleh fungsi anggota dari kelas turunan harus dideklarasikan sebagai pribadi di kelas dasar.

Kelas turunan mewarisi semua metode kelas dasar dengan pengecualian berikut -

  • Konstruktor, destruktor, dan copy konstruktor kelas dasar.
  • Operator kelas dasar yang kelebihan beban.

Warisan Multi Level

Pewarisan dapat terdiri dari beberapa tingkatan dan itu ditunjukkan pada contoh berikut.

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());
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Total area: 169