Selamat Datang Di Anak Jadul Ingin Pintar (AJIP)

Belajar C++ Part 11

Selasa, 27 Desember 20112komentar

            Pewarisan (inheritance) adalah penurunan sifat yang ada pada suatu kelas kepada kelas baru yang menjadi turunannya. Sifat-sifat suatu kelas ditentukan oleh data anggota dan metode, sehingga yang dimaksud penurunan sifat adalah penurunan data anggota atau metode. Kelas yang menurunkan sifat disebut kelas dasar (base class), sedangkan yang kelas baru yang mewarisi sifat kelas dasar disebut kelas turunan (derived class).

            Dengan pewarisan dapat diciptakan suatu kelas baru yang mana kelas tersebut mewarisi seluruh sifat kelas dasar yang mempunyai akses public atau protected ditambah sifat khusus dari kelas yang bersangkutan. Ketentuan ini tidak berlaku sebaliknya, artinya sifat yang ada pada kelas turunan tidak diwariskan pada kelas dasar.
Ketentuan utama dengan adanya pewarisan yaitu memungkinkan suatu kode yang telah ditulis mudah sekali untuk digunakan kembali. Anda telah membuat suatu kelas yang telah diuji. Jika suatu nanti, anda ingin menerapkan kode tersebut pada sesuatu yang mempunyai sifat-sifat kelas tersebut, anda tinggal mewariskan kelas yang telah ada di kelas baru (kelas turunan). Anda tidak perlu mengotak-atik kelas yang teruji, sehingga efek samping yang tidak diharapkan tidak terjadi. Dengan cara ini pengembangan program menjadi lebih efisien dan menghemat waktu. Selain itu, anda dapat menambahkan sifat-sifat baru yang tidak ada pada kelas dasar atau bahkan dapat mengganti sifat-sifat pada kelas turunan, yang berbeda dengan sifat kelas dasar.

         Dari mekanisme pewarisan yang sudah diuraikan diatas, dapat disimpulkan bahwa pewarisan ini dikelompokkan menjadi tiga, yaitu :
1.    Pewarisan Tunggal (single inheritance)
2.    Pewarisan Jamak (multiple inheritance), dan
3.    Pewarisan Jamak Maya (virtual multiple inheritance)


12.1. PEWARISAN TUNGGAL (SINGLE INHERITANCE)
            Adalah pewarisan yang mana jumlah kelas dasarnya tunggal. Pada pewarisan ini, kelas turunan dapat berjumlah lebih dari satu. Pewarisan tunggal dapat digambarkan dengan sintak program sebagai berikut :
class A
{
  . . .
};
class B : public A
{
  . . .
}

Sintak di atas adalah mekanisme pewarisan secara public. Dengan implementasi di atas, kelas B merupakan kelas turunan dari kelas A. Selain pewarisan public, pewarisan juga dilakukan secara protected maupun private.

Contoh program  pewarisan tunggal :
#include<iostream.h>
class makhluk
{
   public:
   void berkembang();
};
class hewan : public makhluk
{
   public:
   void bergerak();
};
class kuda : public hewan
{
   public:
   void berlari();
};
main()
{
   makhluk mk;  hewan hw;  kuda kd;
   cout<<endl<<" Sifat-sifat dari Makhluk adalah : "<<endl;
   mk.berkembang();
   cout<<endl<<" Sifat-sifat dari Hewan adalah : "<<endl;
   hw.berkembang();  hw.bergerak();
   cout<<endl<<" Sifat-sifat dari Kuda adalah : "<<endl;
   mk.berkembang();  hw.bergerak();  kd.berlari();
}
void makhluk::berkembang()
{
   cout<<" Berkembang biak"<<endl;
}
void hewan::bergerak()
{
   cout<<" Bergerak berpindah tempat"<<endl;
}
void kuda::berlari()
{
   cout<<" Berlari sangat kencang seperti angin"<<endl;
}






Hasil Kompilenya :

12.2. PEWARISAN JAMAK (MULTIPLE INHERITANCE)
Adalah pewarisan dimana satu kelas diturunkan lebih dari satu kelas yang berbeda. Dalam pewarisan ini jumlah kelas dasarnya lebih dari satu, dan perlu dicatat bahwa kelas dasarnya bukan merupakan turunan dari satu kelas. Kelas turunan mewarisi seluruh sifat dari kelas dasarnya, sehingga sifat dari beberapa kelas dasar dan sifat khas dirinya. Perhatikan sintak dari pewarisan tunggal berikut ini :
class A
{
  . . .
};
class B
{
  . . .
}
class C: public A, public B
{
  . . .
}

            Pada bentuk tersebut terdapat dua kelas dasar yaitu kelas A dan kelas B yang menurunkan kelas C. Kelas C akan mewarisi sifat dari kelas A maupun sifat dari kelas B, tetapi tidak berlaku sebaliknya.



Perhatikan contoh program berikut ini :
#include<iostream.h>
class kuda
{
   public :
   void berlari()
   {
     cout<<" > Berlarinya sangat cepat"<<endl;
   }
};
class burung
{
   public:
   void terbang()
   {
     cout<<" > Terbang menembus awan"<<endl;
   }
};
class pegasus: public kuda, public burung
{
   public:
   void lariterbang()
   {
     cout<<" > Bersayap, lari dan dapat terbang ke
      angkasa"<<endl;
   }
};
main()
{
   pegasus pg;
   cout<<"Sifat dari PEGASUS yaitu : "<<endl;
   pg.berlari();
   pg.terbang();
   pg.lariterbang();
}
Kompile dari program diatas :

12.3. Pewarisan Jamak Maya (virtual multiple inheritance)
            Adalah pewarisan yang mana kelas dasarnya lebih dari satu dan beberapa di antara kelas dasar tersebut merupakan kelas turunan dari kelas dasar yang sama. Mekanisme pewarisan sifat suatu kelas dasar kepada kelas turunan sama dengan pewarisan yang lain. Perhatikan sintak berikut ini :
class A
{
  . . .
};
class B: virtual public A
{
  . . .
};
class C: virtual public A
{
  . . .
};
class D: public B, public C
{
  . . .
};

Kelas D merupakan turunan dari kelas B dan C, sedangkan kelas B dan C merupakan kelas turunan dari kelas dasar yang sama yaitu kelas A. Supaya berjalan pewarisan dari kelas A kepada kelas B maupun C harus secara virtual. Kelas virtual A pertama menurunkan kelas B, sedangkan kelas virtual A kedua menurunkan kelas C. Contoh program dalam pewarisan ini :
#include"iostream.h"
class hewan
{
   public:
   void bergerak()
   {
    cout<<" # Bergerak berpindah tempat"<<endl;
   }
};
class kuda: virtual public hewan
{
   public :
   void berlari()
   {
    cout<<" # Berlarinya sangat cepat"<<endl;
   }
};
class burung: virtual public hewan
{
   public:
   void terbang()
   {
    cout<<" # Terbang menembus awan"<<endl;
   }
};
class pegasus: public kuda, public burung
{
   public:
   void lariterbang()
   {
    cout<<"# Bersayap, lari dan dapat terbang ke angkasa"<<endl;
   }
};
main()
{
   pegasus pg;
   cout<<">> Sifat dari PEGASUS << "<<endl;
   cout<<"========================"<<endl;
   pg.bergerak();
   pg.berlari();
   pg.terbang();
   pg.lariterbang();
}

Kompile dari program diatas:


12.4. KONSTRUKTOR DAN DESTRUKTOR PADA PEWARISAN
            Di dalam contoh-contoh diatas belum melibatkan konstruktor dan destruktor secara eksplisit. Di dalam pewarisan suatu konstruktor perlu diperhatikan terutama konstruktor penyalinan. Jika konstruktor kelas dasar hanya berisi pernyataan memberi nilai data anggota provate, maka akses private dapat diganti dengan akses protected agar data anggota pada kelas dasar dapat diakses dari kelas turunan.


Contoh programnya :
#include"iostream.h"
#include"conio.h"
#include"string.h"
class Kendaraan
{
   private:
   char nama[15];
   public:
     Kendaraan(char *nama_kendaraan = "T1AS")
     {
        strcpy(nama, nama_kendaraan);
        cout<<" Hidupkan mesin kendaraan anda ..."<<endl;
     }
     ~Kendaraan()
     {
        cout<<" Matikan mesin kendaraan anda ..."<<endl;
     }
     void info_kendaraan()
     {
        cout<<nama<<" Sedang berjalan ..."<<endl;
     }
};
class Mercy : public Kendaraan
{
   public:
   Mercy(char *nama_mercy) : Kendaraan(nama_mercy)
   {
     cout<<" Hidupkan mesin mobil merah ..."<<endl;
   }
   ~Mercy()
   {
     cout<<" Matikan mesin mobil merah itu ..."<<endl;
   }
};
void main()
{
   clrscr();
   Mercy mewah(" Mobil Yang Mewah");
   mewah.info_kendaraan();
   cout<<" Akhir dari permulaaan()..."<<endl;
}

Keluarannya :
Hidupkan mesin kendaraan anda ...
Hidupkan mesin mobil merah ...
Mobil Yang Mewah Sedang berjalan ...
Akhir dari permulaan()...
Matikan mesin mobil merah itu ...
Matikan mesin kendaraan anda ...

Berdasarkan hasil eksekusi di atas terlihat bahwa, pada saat obyek berkelas Turunan diciptakan :
Ø  Konstruktor kelas dasar dengan sendirinya dijalankan
Ø  Kemudian konstruktor kelas turunan baru dijalankan
Pada saat obyek berakhir :
Ø  Destruktor kelas turunan dijalankan terlebih dahulu
Ø  Kemudian destruktor kelas dasar dijalankan.


Share this article :

+ komentar + 2 komentar

24 Agustus 2020 pukul 01.49

nice information min
penyedot timah

24 Januari 2024 pukul 00.41

Bagaimana pewarisan memungkinkan penggunaan kembali kode secara efisien dalam pengembangan program?
Apa perbedaan antara kelas dasar (base class) dan kelas turunan (derived class) dalam konteks pewarisan?
Regard Telkom University

Posting Komentar

 
Copyright © 2011. BELAJAR PEMOGRAMAN - All Rights Reserved
Proudly powered by Fasilkom Universitas Esa Unggul