Anda di halaman 1dari 7

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
a. Kelas Hewan sebagai kelas dasar mewariskan anggotanya (indera, alat gerak, dll) kepada
Kelas Burung dan Kelas Gajah yang selanjutnya disebut sebagai kelas turunan.
b. 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>

Contoh :
class Gajah : public Hewan

Penentu Hak akses sebelumnya di Hak akses baru di kelas


kelas dasar turunan
pewarisan
private private tidak diwariskan
protected private
public private
protected private tidak diwariskan
protected protected (tetap)
public protected
public private tidak diwariskan
protected protected (tetap)
public 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)
      [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)
      [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”. 

Anda mungkin juga menyukai