C++ - Inheritance (Dasar Pewarisan) - nblognlife

C++ - Inheritance (Dasar Pewarisan)

     Seperti bahasa pemrograman yang menggunakan konsep OOP lainnya, C++ juga dapat melakukan inheritance atau pewarisan. Inherintance atau pewarisan memungkinkan variabel atau fungsi anggota dari suatu kelas diwariskan kelas lain.  Kelas yang mewariskan disebut kelas dasar, sedangkan kelas yang diwarisi disebut kelas turunan.

     Salah satu keuntungan penggunaan konsep inheritance adalah membuat suatu blok kode menjadi reuseable. Hal ini memungkinkan blok kode yang pernah dibuat dapat digunakan kembali. Perhatikan gambar di bawah ini!
 
C++ - Inheritance (Dasar Pewarisan)

Penjelasan
-       Kelas Hewan sebagai kelas dasar mewariskan anggotanya (indera, alat gerak, dll) kepada Kelas Burung dan Kelas Gajah yang selanjutnya disebut sebagai kelas turunan.
-       anggota khusus : merupakan anggota yang hanya dimiliki oleh kelas tersebut sehingga membedakan dengan kelas lain. Misalkan anggota khusus dari Kelas Burung adalah sayap, terbang, sedangkan anggota khusus dari Kelas Gajah adalah belalai, gading.

Bentuk penulisan pewarisan:
class <nama_kelas_turunan> : <penentu_pewarisan> <nama_kelas_dasar>

*penentu_pewarisan dapat berupa private, protected, atau public. Baca Public, Protected, Private pada OOP.

Contoh :
class Gajah : public Hewan

Penentu pewarisan
Hak akses sebelumnya di kelas dasar
Hak akses baru di kelas turunan
private
private
protected
public
tidak diwariskan
private
private
protected
private
protected
public
tidak diwariskan
protected (tetap)
protected
public

private
protected
public
tidak diwariskan
protected (tetap)
public (tetap)
Tabel Penentu Pewarisan

     Pada pewarisan anggota kelas yang didefinisikan secara private tidak diwariskan, selain itu konstruktor dan destruktor juga tidak diwariskan. Untuk lebih jelasnya perhatikan gambar di bawah ini!
C++ Inheritance (Dasar Pewarisan) - private, protected, dan public


Berikut adalah contoh program sederhana yang menerapkan inheritance pada C++:
/*
      C++ - Inheritance (Dasar Pewarisan)
      Microsoft Visual Studio Express 2012
      [RS]
*/
#include <iostream>
#include <conio.h>
using namespace std;

//Kelas Dasar "Hewan"
class Hewan
{
private:
      char nama[15];
      char habitat[15];

public:
      void infoHewan()
      {
            cout<<endl;
            cout<<"Info salah satu jenis hewan"<<endl;
      }
};

class Gajah : public Hewan
{
private:
      char ciri_khusus[20];

public:
      //konstruktor
      Gajah(char *nm, char *hbt, char *cr_k)
      {
            strcpy(nama, nm);
            strcpy(habitat, hbt);
            strcpy(ciri_khusus, cr_k);
      }

      void infoGajah()
      {
            cout<<"Nama        : "<<nama<<endl;
            cout<<"Habitat     : "<<habitat<<endl;
            cout<<"Ciri Khusus : "<<ciri_khusus<<endl;
      }
};

int main()
{
      //menciptakan objek "gjh" sekaligus melakukan inisialisasi melalui Konstruktor dari Kelas Gajah
      Gajah gjh("Gajah", "Padang rumput", "Belalai dan Gading");

      cout<<"INHERITANCE PADA C++"<<endl;
      cout<<"--------------------"<<endl;
     
      gjh.infoHewan();
      gjh.infoGajah();

      _getche();
      return 0;
}

Coba compile kode di atas maka akan muncul kesalahan yang lebih kurang menyatakan bahwa variabel nama dan habitat tidak dapat diakses atau tidak dikenali pada kelas Gajah. Mengapa demikian? Hal tersebut terjadi karena varibel nama dan habitat pada kelas Hewan bersifat private. Ingat lagi bahwa anggota kelas private tidak pernah diwariskan.

     Untuk mengatasi kesalahan pada program di atas, ganti keyword private pada kelas Hewan menjadi protected seperti di bawah ini.
protected:
      char nama[15];
      char habitat[15];

     Sekarang variabel nama dan habitat juga diwariskan ke kelas Gajah sehingga dapat digunakan. Selanjutnya compile program, hasilnya seperti yang ditunjukkan oleh output program di bawah ini.

Output
INHERITANCE PADA C++
--------------------

Info salah satu jenis hewan
Nama        : Gajah
Habitat     : Padang rumput
Ciri Khusus : Belalai dan Gading

Penjelasan
     Seperti terlihat pada program di atas, varibel nama, habitat, dan fungsi infoHewan tidak pernah dibuat pada kelas Gajah namun dapat dikenali oleh kelas Gajah, inilah konsep dari inheritance (Pewarisan).
     Seperti yang pernah saya singgung sebelumnya, inilah keuntungan dari inheritance (reuseable). Misalnya kita ingin membuat kelas Burung, burung adalah hewan dan setiap hewan pasti memiliki nama/sebutan dan juga habitat, sehingga kita tidak perlu membuat blok kode lagi, tinggal mewariskan dari kelas Hewan saja. Hal ini secara otomatis juga memunculkan keuntungan lain yaitu dalam hal keefektifan dan keefesienan dalam membuat program.


CARA LAIN
     Pada suatu kondisi mungkin kita menginginkan variabel nama dan habitat tetap bersifat private agar hanya dapat diakses melalui kelas yang mendeklarasikan saja, dan tidak mengizinkan untuk diakses oleh kelas lain walaupun yang merupakan sub class-nya (kelas turunan). Maka dengan sedikit modifikasi hal tersebut menjadi memungkinkan untuk dilakukan.

Berikut adalah program yang telah dimodifikasi:
/*
      C++ - Inheritance (Dasar Pewarisan)
      Microsoft Visual Studio Express 2012
      [RS]
*/
#include <iostream>
#include <conio.h>
using namespace std;

//Kelas Dasar "Hewan"
class Hewan
{
private:
      char nama[15];
      char habitat[15];

public:
      //konsruktor
      //di sini letak modifikasinya
      Hewan(char *nm, char *hbt)
      {
            cout<<"//konstruktor kelas Hewan dijalankan"<<endl;
            strcpy(nama, nm);
            strcpy(habitat, hbt);
      }

      ~Hewan()
      {
            cout<<"//destruktor kelas Hewan dijalankan"<<endl;
            _getche();
      }

      //di sini letak modifikasinya
      void infoHewan()
      {
            cout<<endl;
            cout<<"Info salah satu jenis hewan"<<endl;
            cout<<"Nama        : "<<nama<<endl;
            cout<<"Habitat     : "<<habitat<<endl;
      }
};

class Gajah : public Hewan
{
private:
      char ciri_khusus[20];

public:
      //konstruktor
      //di sini letak modifikasinya
      Gajah(char *nm, char *hbt, char *cr_k) : Hewan(nm, hbt)
      {
            cout<<"//konstruktor kelas Gajah dijalankan"<<endl;
            strcpy(ciri_khusus, cr_k);
      }

      ~Gajah()
      {
            cout<<"//destruktor kelas Gajah dijalankan"<<endl;
      }

      //di sini letak modifikasinya
      void infoGajah()
      {
            cout<<"Ciri Khusus : "<<ciri_khusus<<endl;
      }
};

int main()
{
    //menciptakan objek "gjh" sekaligus melakukan inisialisasi melalui Konstruktor dari Kelas Gajah dan Konstruktor dari Kelas Hewan
      Gajah gjh("Gajah", "Padang rumput", "Belalai dan Gading");

      cout<<"\n//awal fungsi main()\n"<<endl;
      cout<<"INHERITANCE PADA C++"<<endl;
      cout<<"--------------------"<<endl;
     
      gjh.infoHewan();
      gjh.infoGajah();

      cout<<"\n//akhir fungsi main()\n"<<endl;
      return 0;
}

Output
//konstruktor kelas Hewan dijalankan
//konstruktor kelas Gajah dijalankan

//awal fungsi main()

INHERITANCE PADA C++
--------------------

Info  salah satu jenis hewan
Nama        : Gajah
Habitat     : Padang rumput
Ciri Khusus : Belalai dan Gading

//akhir fungsi main()

//destruktor kelas Gajah dijalankan
//destruktor kelas Hewan dijalankan

Penjelasan
Perhatikan potongan program di bawah ini dan output program,
Gajah gjh("Gajah", "Padang rumput", "Belalai dan Gading");
Ketika objek gjh diciptakan secara otomatis konstruktor akan dijalankan. Lalu bagaimana urutannya? Seperti yang terlihat pada ouput program kontruktor dari kelas dasar (Hewan) dijalankan terlebih dahulu, kemudian baru konstruktor dari kelas turunan (Gajah) dijalankan. Destruktor kelas turunan (Gajah) dijalankan terlebih dahulu, kemudian baru destruktor kelas dasar (Hewan) dijalankan.

Perhatikan  konstruktor Gajah(char *nm, char *hbt, char *cr_k) : Hewan(nm, hbt). Pernyataan : Hewan(nm, hbt) digunakan untuk melakukan inisialisasi terhadap variabel nama dan habitat pada kelas Hewan. Penginisialisasian terjadi ketika objek gjh diciptakan tepatnya ketika konstruktor pada kelas Hewan dijalankan. Penginisialisasian dilakukan dengan memanfaatkan nilai yang ditangkap oleh variabel pada parameter fungsi, yaitu nm dalam hal ini “Gajah” dan variabel hbt dalam hal ini “Padang rumput”. 


[RS]

Klik Like & Share jika postingan ini bermanfaat
Apa tanggapan Anda?

Berikan tanggapan Anda melalui kolom komentar yang telah disediakan.
- Gunakan bahasa yang sopan;
- Saat menjadikan postingan pada blog ini sebagai referensi, jangan lupa mencantumkan sumbernya (link dari blog ini).

Jika blog ini bermanfaat jangan lupa memberikan 'like' atau 'share' untuk mendapatkan update terbaru.

Terima kasih