Polimorfisme dalam C++


Teori Singkat

Polimorfisme merupakan fitur pemrograman berorientasi objek yang penting setelah pengkapsulan dan pewarisan. Polimorfisme berasal dari bahasa Yunani, poly (banyak) dan morphos (bentuk). Polimorfisme menggambarkan kemampuan kode C++ berperilaku berbeda tergantung situasi pada waktu run (program berjalan). Konstruksi ini memungkinkan untuk mengadakan ikatan dinamis (juga disebut ikatan tunda, atau ikatan akhir). Kalau fungsi-fungsi dari suatu kelas dasar didefinisikan ulang atau ditindih pada kelas turunan, maka objek-objek yang dihasilkan hirarki kelas berupa objek polimorfik. Polimorfik artinya mempunyai banyak bentuk atau punya kemampuan untuk mendefinisi banyak bentuk. Perhatikan kelas sederhana berikut.

#include <iostream.h>

class TX

{

public:

double FA(double p)  { return p*p; }

double FB(double p)  { return FA(p) / 2; }

};

class TY : public TX

{

public:

double FA(double p)  { return p*p*p; }

};

void main()

{

TY y;

cout << y.FB(3) << endl;

}

Kelas TX berisi fungsi FA dan FB, dimana fungsi FB memanggil fungsi FA. Kelas TY, yang merupakan turunan dari kelas TX, mewarisi fungsi FB, tetapi mendefinisikan kembali fungsi FA. Yang perlu diperhatikan di sini adalah fungsi TX::FB yang memanggil fungsi TY::FA dalam konteks perilaku polimorfisme. Berapakah output dari program ini? Jawabnya adalah 4.5 dan bukan 13.5! Mengapa? Jawabannya adalah karena kompiler memecahkan ungkapan Y.FB(3) dengan menggunakan fungsi warisan TX::B, yang akan memanggil fungsi TX::FA. Oleh karena itu fungsi TY::FA ditinggalkan dan tidak terjadi perilaku polimorfisme.

C++ menetapkan persoalan ini dan mendukung perilaku polimorfisme dengan menggunakan fungsi virtual. Fungsi virtual, yang mengikat kode pada saat runtime, dideklarasikan dengan menempatkan kata kunci virtual sebelum tipe hasil fungsi. Untuk program di atas, kode double FA(double p) tulis menjadi virtual double FA(double p) baik di kelas TX maupun yang ada di kelas TY. Dengan perubahan ini maka output dari program di atas menjadi 13.5.

Praktek

1. Tulislah program berikut lewat ConsoleWizard pada C++Builder.

#include <iostream.h>

class TBujurSangkar

{

protected:

double panjang;  // panjang sisi bujursangkar

public:

TBujurSangkar(double pj)  { panjang = pj; }

double Panjang()          { return panjang; }

double Lebar()            { return panjang; }

double Luas()           { return Panjang() * Lebar(); }

};

class TPersegiPanjang : public TBujurSangkar

{

protected:

double lebar;  // lebar persegipanjang

public:

TPersegiPanjang(double pj, double lb) :

TBujurSangkar(pj)   { lebar = lb; }

double Lebar()         { return lebar; }

};

void main()

{

TPersegiPanjang *pp = new TPersegiPanjang(8, 6);

cout << “panjang = ” << pp->Panjang() << endl

<< “lebar   = ” << pp->Lebar()   << endl

<< “luas    = ” << pp->Luas();

delete pp;

getchar();

}

~ oleh 12puby pada 9 Juni 2010.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

 
%d blogger menyukai ini: