Polymorphism adalah pemikiran bahwa objek dinamis suatu class dasar dapat
berperilaku seperti class turunan. Jika objek menunjuk class dasar maka ia perilaku
seperti class dasar, dan jika ia menunjuk class turunan ia akan berperilaku
seperti class turunan.
Dalam hal ini obkjek memiliki beberapa bentuk, tergantung ia menunjuk kemana.
Dalam hal ini suatu objek atau class dan perubahan perilakunya adalah dari
kelas dasar ke kelas turunan, tidak bisa objek kelas turunan menunjuk ke kelas
dasar. Polimorfisme dimungkinkan karena adanya mekanisme ikatan dinamis, ikatan
ini adalah ikatan yang terjadi ketika program dijalankan (run-time), ikatan
yang terjadi pada saat compiling disebut ikatan dinamis. Ikatan dinamis hanya
akan terjadi antara suatu objek dinamis dengan metode yang dinamis juga, dalam
hal ini metode virtual (maya)
#include
#include
class Tbujursangkar
{
protected:
double panjang;
Membuat class dengan nama class Tbujursangkar dengan variable panjang dengan
tipe data double dengan sifat protected, class ini akan menjadi class dasar.
public:
Tbujursangkar(double pj){panjang=pj;}
Konstruktor dengan sifat public Tbujursangkar(double pj){panjang=pj;} yang
mendefinisikan variable pj sama dengan panjang,
double Panjang(){return panjang;}
fungsi Panjang dengan return value double yang mengembalikan nilai kembali
ke variable panjang
virtual double Lebar(){return panjang;}
Lalu fungsi Lebar dengan penambahan syntax virtual di depan nama fungsi
menandakan fungsi tersebut bersifat polimorfisme, syntax virtual akan
menciptakan ikatan dinamis, ikatan ini adalah ikatan yang terjadi ketika program
dijalankan (ru-time), Ikatan dinamis ini hanya akan terjadi antara suatu objek
dinamis dengan metode yang dinamis juga, dalam hal ini metode virtual (maya)
double Luas(){return Panjang() *Lebar() ;}};
fungsi double Luas dengan parameter mengalikan antara fungsi Panjang dengan
fungsi Lebar, yang akan menghasilkan Luas persegi panjang.
class Tpersegipanjang:public Tbujursangkar
{
Deklarasi Class diatas merupakan class Tpersegipanjang yang merupakan
turunan dari class Tbujursangkar,
protected:
double lebar;
deklarasi variable lebar, variable lebar merupakan variable tambahan yang
diperlukan untuk menghitung suatu persegi panjang, karena variable panjang
telah ada dalam class induknya sehingga tidak perlu ditampilkan lagi.
public:
Tpersegipanjang(double pj, double lb):Tbujursangkar(pj){lebar=lb;}
Pada bagian public terdapat konstruktor Tpersegipanjang, yang
mendeklarasikan variable pj dan lb dimana pj sama dengan panjang dan lb sama
dengan lebar.
virtual double Lebar(){return lebar;}
deklarasi virtual fungsi Lebar yang menandakan bersifat polimorfisme ini
diketahui dengan penambahan kode virtual didepan nama fungsi.
void main()//program utama
{
Tpersegipanjang *pp=new Tpersegipanjang(8,6);
Memanggil konstruktor Tpersegipanjang dalam variable pointer pp, variable pp
ini di inisialiasi dengan nilai dari dari Tpersegipanjang yaitu 8 dan 6.
cout<<"panjang = "<Panjang()<<endl
<<"lebar = "<Lebar()<<endl
<<"luas = "<Luas()<<endl;
Menampilkan nilai dari panjang() dengan fungsi yang dipanggil pada kelas Tbujursangkar,
lebar() dipanggil dengan fungsi dari kelas Tpersegipanajng yang bersifat
polymorfisme sehingga akan terbentuk ikatan dinamis antara variable panjang
dengan fungsi lebar() dan luas() dengan fungsi yang dipanggil dari kelas
Tbujursangkar.
delete pp;
getch();
}
menghapus nilai dari variable pp agar tidak membebani memori. Dari dua kelas
diatas, pada kelas TBujursangkar pada saat pendefinisian fungsi lebar, return
ditujukan ke variabel panjang, sedangkan pada kelas Tpersegipanjang juga
didefinisikan fungsi lebar yang return valuenya dikembalikan ke variabel lebar.
Sehingga dari kejadian inilah terjadi apa yang dinamakan polimorfisme, yaitu
pendefinisian dua fungsi dengan nama yang sama pada kelas yang berbeda dan
dengan parameter yang berbeda. Polimorfisme tidak sama dengan overloading.
Untuk menghindari polimorfisme yaitu dengan cara menambahkan keyword virtual
didepan fungsi tersebut seperti yang terlihat pada contoh program diatas.
Sehingga ketika program tersebut jika dijalankan hasil dari fungsi luas()
adalah 48.
untuk penambahan fungsi keliling pada program, penambahanya adalah sebagai
berikut :
virtual double keliling(){return 2*(panjang+lebar);}
atau dapat juga menambahkanya pada class Tbujursangkar, hasilnya akan sama
saja. Isi dari fungsi diatas adalah rumus dari keliling persegipanjang. Dan
untuk menampilkan output adalah sebagai berikut
<<"Keliling= "<keliling()<<endl;//pada program
utama
Merupakan pemanggilan dari fungsi keliling pada program utama sama dengan
pemanggilan pada fungsi lebar sebelumnya.