23 Des 2009

Polymorphism


Polymorphism yang berarti “mempunyai banyak bentuk” juga merupakan salah satu sifat class yang memungkinkan sebuah method mempunyai nama yang sama, namun memiliki aksi yang berbeda.




Perbedaan Trivial dan True Polymorphism



Overloading

3 signature yang perlu diperhatikan dalam melakukan overloading :
  • Jumlah argument
  • Letak argument
  • Type argument


Contoh function overloading
Void hitung (int x, int y);
Void hitung(float x, float y);

Overriding

ada 2 jenis virtual method dalam overriding, yaitu :

Pure Virtual Method (tanpa function body)
contoh : virtual void suara() = 0;

Squasi Virtual Method (ada function body)
contoh : virtual void info() {;} 

contoh coding

#include "iostream.h"

class Hewan
{
    public :
       void info()
      {
          cout << "info() class Hewan" << endl;
      }

      virtual void suara()
      {
          cout << "suara() class Hewan" << endl;
      }
};

class Piaraan : public Hewan
{
    public :
    void info()
   {
       cout << "info() class Piaraan" << endl;
   }

   void suara()
   {
       cout << "suara() class Piaraan" << endl;
   }
};

void main()
{
    Piaraan pet;

   Hewan *satu;

   satu = &pet;    //menunjuk ke objek pet

   satu->info();
   satu->suara();

   cin.get();
}



hasil eksekusi





Penjelasan










14 Des 2009

Inheritance

Pada pertemuan ini, mari kita bahas mengenai Inheritance

Apa itu Inheritance?
Inheritance merupakan salah satu sifat dalam Class yang memungkinkan suatu class mewarisi attribute dan method class lain.




Class yang mewariskan sifat disebut dengan Class Induk (base class), sedangkan class yang mewarisi sifat class lain disebut class Turunan (derived class).

Keuntungan dengan adanya Inheritance yaitu memungkinkan suatu kode-kode yang telah ditulis bisa digunakan kembali (reusability) dan pengembangan program (extenability) menjadi lebih efisien dan menghemat waktu karena kita tinggal menambahkan sifat-sifat baru yang dibutuhkan dalam Class Turunannya.

Cara pendeklarasian inheritance   :   class Turunan : type_access Induk

Ada 3 jenis type access, yaitu public, protected, dan private.
Pemakaian type access tersebut memiliki perbedaan dalam hak pengaksesan attribute dan method dalam class.




Contoh coding

#include "iostream.h"

class Induk
{
       public :
              void info_induk()
              {
                   cout <<  "method info_induk jalan" << endl;
              }
};

class Anak : public Induk
{
       public :
            void info_anak()
              {
                   cout <<  "method info_anak jalan" << endl;
              }
};

void main()
{
       Anak obj;

       obj.info_induk();         // mewarisi method dari class Induk
       obj.info_anak();

       cin.get();
}

Hasil eksekusi :
method info_induk jalan
method info_anak jalan

Constructor dan Destructor pada Inheritance
Pada saat objek di class Turunan dibuat, constructor kelas Induk dengan sendirinya akan dijalankan, setelah itu baru constructor class Turunan, sedangkan untuk destructor, destructor class Turunan akan dijalankan dahulu, baru setelah itu destructor class Induk.

Inheritance juga bisa dilakukan dalam beberapa tingkat





Multiple Inheritance
adalah sebuah class yang mewarisi lebih dari satu class Induk.
Dalam multiple Inheritance bisa terjadi kerancuan apabila terdapat dua method pada class Induk dengan nama yang sama.







contoh coding

#include
"iostream.h"

class IndukSatu
{
        public :
               void info()
               {
                     cout <<  "Info class IndukSatu" << endl;
               }
};

class IndukDua
{
        public :
               void info()
               {
                     cout <<  "Info class IndukDua" << endl;
               }
};

class Anak : public IndukSatu, public IndukDua
{

};

void main()
{
       Anak obj;

       // obj.info();   --> menimbulkan error, compiler kebingungan karena ada 2 class Induk yang mewariskan method dengan nama yang sama

      obj.IndukSatu::info();     //memanggil method info dari class IndukSatu

      obj.IndukDua::info();     //memanggil method info dari class IndukDua
}

Hasil eksekusi
Info class IndukSatu
Info class IndukDua