Jumat, 18 November 2011

C++ Lanjutan 30

9.5 INHERITANCE ( PEWARISAN )

      C++ memungkinakan suatu kelas mewarisi data ataupun fungsi anggota kelas lain. Sifat seperti ini disebut pewarisan. Kelas uyang mewarisi sifat kelas lain disebut kelas turunan ( derived class ). Sedangkan kelas yang mewariskan sifat ke kelas lain lain disebut kelas dasar ( base class ).

        Untuk memahami tentang konsep pewarisan, marilah kita lihat contoh berikut ini.

#include <iostream.h>
#include <conio.h>

class Basis
{
   private :
    int alpha;
    int bravo;
   public :
    void info_basis()
    {
       cout<<”info_basis() dijalankan…”<<endl;
    }
  };

class Turunan : public Basis
{
   public :
    void info_turunan()
    {
        cout<<”info_turunan() dijalankan…”<<endl;
     }
  };

void main()
{
   clrscr();
   Turunan anak;
    anak.info_basis();
    anak.info_turunan();
}
Keluarannya :
info_basis() dijalankan…
info_turunan() dijalankan…

      Pada contoh diatas, terdapat kelas bernama Basis dan Turunan. Dalam hal ini :
·         Basis adalah kelas dasar
·         Turunan  adalah kelas turunan
Kelas Turunan mewarisi sifat-sifat dari kelas Basis .
Perhatikan pernyataan pada main() :

Turunan anak;
Anak.info_basis();

Sekalipun info_basis() dideklarasikan pada kelas Basis, ia juga diwariskan pada kelas Turunan. Namun bagaimana mekanisme pewarisannya? Jawaban dari pertanyaan ini terletak pada topik berikut.
Pada pendeklarasian kelas Turunan terdapat baris sebagai berikut :

Class Turunan : public Basis

Pada  baris ini terdapat kata-kata kunci tersebut pada konteks ini ? Untuk melihat kegunaan kata-kata kunci ini, perhatikan terlebih dulu program berikut.

#include <iostream.h>
#include <conio.h>

class Basis
{
   private :
    int alpha;
    int bravo;
   public :
    void info_basis()
    {
       cout<<”info_basis() dijalankan…”<<endl;
    }
  };

class Turunan : Basis
{
   public :
    void info_turunan()
    {
        cout<<”info_turunan() dijalankan…”<<endl;
     }
  };

void main()
{
   clrscr();
   Turunan anak;
    anak.info_basis();
    anak.info_turunan();
}

Perbedaan program di atas dengan program sebelumnya terletak pada kata-kunci public. Pada program diatas, kata kunci public pada baris yang berisi class Turunan dibuang.
Apabila program dikompilasi, kesalahan akan terjadi, yakni pada pernyataan :

anak.info_basis();

Kesalahan menyatakan bahwa Basis::info_basis() tidaklah dapat diakses pada main(). Lalu, apa artinya?

Bentuk seperti :

class Turunan : Basis

sebenarnya mempunyai makna yang sama dengan :

class Turunan : private Basis

Maksudnya yaitu semua anggota yang bersifat public ( dan juga protected ) pada kelas dasar ( Basis ) diwariskan ke kelas turunan ( Turunan ) sebagai anggota yang bersifat private.
Sedangkan kalau pewarisan dilakukan dengan public, semua anggota yang bersifat public pada kelas dasar diwariskan ke kelas turunan seperti apa adanya pada kelas basis.

^SELESAI^
Untuk yang mengikuti dari awal hingga akhir posting Dasar pemograman C++, Saya ucapkan terimakasih.

C++ Lanjutan 29

9.3 KONSTRUKTOR

      Konstruktor adalah fungsi anggota yang mempunyai nama yang sama dengan nama kelas. Kegunaannya :
  • Mengalokasikan ruang bagi sebuah objek
  • Memberikan nilai awal terhadap anggota data suatu objek
  • Membentuk tugas-tugas umum lainnya

Contoh :
#include <iostream.h>
class jumlah
{
   public:
    int jumlah1;
    int jumlah2;
    jumlah();
};

jumlah objek1,objek2;
void main()
{
   cout<<”Didalam main() \n”;
   cout<<”objek1.jumlah1 adalah “<<objek1.jumlah1<<endl;
   cout<<”objek1.jumlah2 adalah “<<objek1.jumlah2<<endl;
   cout<<”objek2.jumlah1 adalah “<<objek2.jumlah1<<endl;
   cout<<”objek2.jumlah2 adalah “<<objek2.jumlah2<<endl;
}

jumlah::jumlah()
{
   cout<<”Didalam jumlah() \n”;
}

Keluarannya :
Didalam jumlah()
Didalam jumlah()
Didalam main()
objek1.jumlah1 adalah 0
objek1.jumlah2 adalah 0
objek2.jumlah1 adalah 0
objek2.jumlah2 adalah 0

Kesimpulan :
·         Nama konstruktor sama dengan nama kelas
·         Konstruktor tidak mempunyai nilai balik
·         Konstruktor harus diletakkan di bagian public, coba saja anda meletakkan konstruktor dalam contoh diatas dibagian private.
·         Konstruktor dijalankan dengan sendirinya pada saat objek diciptakan ( dalam contoh diatas yaitu objek1 dan objek2). Bahkan konstruktor dijalankan sebelum fungsi main() dijalankan.


9.4 DESTRUKTOR

      Destruktor adalah fungsi anggota yang mempunyai nama yang sama dengan nama kelas ditambah symbol tilde ( ~ ) didepannya.


Contoh :
#include <iostream.h>
class jumlah
{
   public:
    int jumlah1;
    int jumlah2;
    ~jumlah();
};

jumlah objek1,objek2;
void main()
{
   cout<<”Didalam main() \n”;
   cout<<”objek1.jumlah1 adalah “<<objek1.jumlah1<<endl;
   cout<<”objek1.jumlah2 adalah “<<objek1.jumlah2<<endl;
   cout<<”objek2.jumlah1 adalah “<<objek2.jumlah1<<endl;
   cout<<”objek2.jumlah2 adalah “<<objek2.jumlah2<<endl;
}

jumlah::~jumlah()
{
   cout<<”Didalam jumlah() \n”;
}

Keluarannya :
Didalam main()
objek1.jumlah1 adalah 0
objek1.jumlah2 adalah 0
objek2.jumlah1 adalah 0
objek2.jumlah2 adalah 0
Didalam jumlah()
Didalam jumlah()

Kesimpulan :
·         Nama konstruktor sama dengan nama kelas ditambah tanda tilde ( ~ ) di depannya
·         Destruktor tidak mempunyai nilai balik
·         Destruktor harus diletakkan di bagian public, coba saja anda meletakkan destruktor dalam contoh diatas dibagian private.
·         Destruktor dijalankan dengan sendirinya pada saat objek akan sirna ( dalam contoh diatas yaitu objek1 dan objek2).

C++ Lanjutan 28

IX. KELAS

9.1 KELAS & STRUKTUR

      Kelas merupakan struktur data dari objek. Untuk menjelaskan tentang kelas, akan kita bandingkan bentuk antara struktur dan kelas.






BENTUK
KELAS
STRUKTUR

class nama_class
{
  private :
  anggota_data;
 
  public :
  fungsi_anggota;
 } ;
   


struct nama_struct
{
   anggota_data;
} ;

Terlihat perbedaan antara kelas dan struktur, yaitu :

PERBEDAAN
KELAS
STRUKTUR
Terdapat anggota data dan fungsi anggota. Anggota data biasanya berupa variabel dan fungsi anggota biasanya berupa fungsi.
Hanya terdapat anggota data
Terdapat kata-kata kunci private dan public yang menentukan hak akses bagi anggota-anggota di dalam kelas.
  • Private dapat digunakan di dalam kelas untuk memproteksi anggota-anggota tertentu dari kelas, agar tidak dapat diakses dari luar kelas secara langsung. Private merupakan default dari kelas.
  • Public mengizinkan anggota-anggota yang berada didalamnya bebas di akses dari luar kelas
Hak akses pada struktur sama seperti hak akses public pada kelas

9.2 KELAS SECARA UMUM

      Konsep penggabungan data dan fungsi seperti diatas disebut encapsulasi, yang diterapkan dalam C++ dengan tipe turunan.

Contoh Kelas :

1.  Fungsi didefinisikan di dalam kelas
    
     #include <iostream.h>
     #include <string.h>
     class penduduk
     {
        private:
           int id;
           char nama[80];
        public:
           void tampilkan(void)
            {
               cout<<”No. KTP : “<<id<<endl;
               cout<<”Nama    : “<<nama<<endl;
             }
       
         void set(int idn, char *n)
             {
               id = idn;
               strcpy(nama,n);
              }
       };
      
       void main()
       {
         penduduk saya;
         saya.set(1234,”Andi”);
         saya.tampilkan();
       }

2. Fungsi anggota didefinisikan diluar kelas

     #include <iostream.h>
     #include <string.h>
     class penduduk
     {
        private:
           int id;
           char nama[80];
        public:
            void tampilkan();
           void set(int idn, char *n);
       };
      
       void main()
       {
         penduduk saya;
         saya.set(1234,”Andi”);
         saya.tampilkan();
       }
       
       void penduduk :: tampilkan(void)
        {
           cout<<”No. KTP : “<<id<<endl;
            cout<<”Nama    : “<<nama<<endl;
         }
        void penduduk :: set(int idn, char *n)
         {
            id = idn;
            strcpy(nama,n);
          }

Keluaran kedua contoh diatas sama saja, yaitu :
No. KTP : 1234
Nama     : Andi

Penjelasan :
Saya merupakan objek dari class penduduk.Pada contoh 2 fungsi didefinisikan diluar, oleh karena itu pada pendefinisian fungsi harus memiliki bentuk :

      tipe_return_fungsi nama_kelas :: nama_fungsi (parameter)

Hal ini untuk memberitahu kompiler bahwa fungsi tersebut merupakan anggota dari kelas nama_kelas. Simbol ( :: ) merupakan operator resolusi lingkup.