Anda di halaman 1dari 8

1Modul Bahasa C++, harni_kus@yahoo.

com

14
FUNGSI VIRTUAL & POLIMORFISME

14.1 Fungsi Virtual


Fungsi virtual atau Metode Virtual merupakan bagian penting dalam
pemrograman berorientasi objek karena mendukung Polyimorfisme. Fungsi virtual
merupakan bagian dari kelas dan fungsi tersebut dapat didefiniskan ulang pada
kelas – kelas turunannya.
Untuk mendefinisikan sebuah fungsi virtual adalah dengan mnggunakan kata
Virtual, yaitu dengan menempatkannya di depan pendeklarasian fungsi tersebut.
Seperti yang terlihat pada contoh dibawah ini
class Binatang
{
public: virtual void Makan()
{
cout << "Makan seperti binatang pada umumnya." << endl;
}
};

Pendefinisian fungsi virtual biasanya tidak begitu berarti, artinya kode – kode
yang terdapat pada fungsi virtual sifatnya general. Selanjutnya kelas turunan akan
mendefiniskan ulang fungsi visrtual tersebut. Apabila ada kelas turunan yang tidak
mendefinisikan ulang fungsi virtual tersebut maka fungsi yang digunakan adalah
fungsi virtual. Untuk lebih jelasnya perhatikan contoh program dibawah ini .
#include <iostream.h>
class Binatang
{
public: virtual void Makan()
{
cout << "Makan seperti binatang pada umumnya." << endl;
}
};

PUSAT PENGEMBANGAN BAHAN AJAR – UMB Harni Kusniyati ST.


C++
2Modul Bahasa C++, harni_kus@yahoo.com

class Serigala : public Binatang


{
public: void Makan()
{
cout << "Makan seperti Serigala!" << endl;
}
};

class Ikan : public Binatang


{
public: void Makan()
{
cout << "Makan seperti Ikan!" << endl;
}
};

class BinatangLain : public Binatang


{
};

int main()
{
Binatang *Hewan[4];
Hewan[0] = new Binatang();
Hewan[1] = new Serigala();
Hewan[2] = new Ikan();
Hewan[3] = new BinatangLain();

for(int i = 0; i < 4; i++)


Hewan[i]->Makan();
return 0;
}

Maka hasil yang akan diberikan dari program adalah

PUSAT PENGEMBANGAN BAHAN AJAR – UMB Harni Kusniyati ST.


C++
3Modul Bahasa C++, harni_kus@yahoo.com

Apabila kata virtual kita hilangkan maka hasil yang diberikan adalah
Makan seperti binatang pada umumnya.
Makan seperti binatang pada umumnya.
Makan seperti binatang pada umumnya.
Makan seperti binatang pada umumnya.

Perbedaan fungsi virtual dengan fungsi lainnya adalah terdapat pada cara
pemanggilan fungsi tersebut. Pemanggilan fungsi virtual adalah pada saat program
sedang jalan (run-time), sedangkan pemanggilan fungsi lainnya dilakukan pada saat
compile.

14.2 Polimorfisme
Polimorfisme sesuai dengan asal usul kata pembentuknya, berarti “mempunyai
banyak bentuk”. Dalam wujudnya polimorfisme dapat beroperasi pada dua aras,
yaitu saat pengompilasian dan saat pengeksekusian. Overlooding terhadap fungsi
dan operator merupakan bentuk polimorfisme saat pengompilasian.

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

PUSAT PENGEMBANGAN BAHAN AJAR – UMB Harni Kusniyati ST.


C++
4Modul Bahasa C++, harni_kus@yahoo.com

kelas berupa objek polimorfik. Polimorfik artinya mempunyai banyak bentuk atau
punya kemampuan untuk mendefinisi banyak bentuk.

Polimorphisme adalah proses kebanyak rupaan, artinya kita dapat


mengimplementasikan sesuatu hal yang berbeda melalui suatu cara yang sama.
Misal : terdapat 5 orang penyanyi, maka hasil atau implementasinya pasti akan
berbeda melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin,
bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan
dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa
tersebut dikirim. Contohnya, bila sebuah burung menerima pesan "gerak cepat", dia
akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang
sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah
pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini
disebut polimorfisme karena sebuah variabel tungal dalam program dapat
memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks
program yang sama dapat memanggil beberapa metode yang berbeda di saat yang
berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa
fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.

CONTOH PROGRAM
#include<iostream.h>
#include<conio.h>
#include<stdio.h>

class mahluk
{
public :
void informasi()
{
cout<<"Informasi()pada mahluk..."<<endl;
}
virtual void keterangan()
{
cout<<"Keterangan()pada mahluk..."<<endl;
}
};

PUSAT PENGEMBANGAN BAHAN AJAR – UMB Harni Kusniyati ST.


C++
5Modul Bahasa C++, harni_kus@yahoo.com

class mamalia:public mahluk


{
public :
void informasi()
{
cout<<"informasi() pada mahluk..."<<endl;
}
void keterangan()
{
cout<<"Keterangan() pada mamalia..."<<endl;
}
};
class sapi : public mamalia
{
public :
void informasi()
{
cout<<"informasi() pada Sapi..."<<endl;
}
void keterangan()
{
cout<<"Keterangan()pada Sapi..."<<endl;
}
};

void main()
{
clrscr();
mamalia mamalia;
sapi sapi_sumba;
mahluk*binatang;

cout<<endl<<endl;
binatang = &mamalia;
binatang-> informasi();
binatang ->keterangan();

PUSAT PENGEMBANGAN BAHAN AJAR – UMB Harni Kusniyati ST.


C++
6Modul Bahasa C++, harni_kus@yahoo.com

cout<<"--------------"<<endl;

binatang= &sapi_sumba;
binatang-> informasi();
binatang ->keterangan();

getch();
}

HASIL EKSEKUSI

Perhatikan hasil didepan dan juga fungsi-fungsi anggota kelas yang ada pada ketiga
kelas(Makhluk, Mamalia dan Sapi). Pertama-tama kelas mamalia mewarisi mahluk
dan sapi mewarisi mamalia. Kemuian pada pendeklarasian kelas mahluk, perbedaan
yang menyolok antara fungsi anggota informasi() dan keterangan() terletak pada
kata-kata kunci virtual(yang lainnya tentu saja berupa perbedaan string yang akan
ditampilkan oleh cout). Pada kelas mamalia dan sapi, perbedaan yang nyata tidak
ada, kecuali perbedaan dalam hal string.

Sekarang kita lihat pada bagian main(). Mula-mula terdapat penciptaan obyek
berkelas mamalia dan sapi dan pointer yang menunjuk ke kelas mahluk. Kemudian
pointer ini diatur agar menunjuk ke obyek dinamis berkelas mamalia. Saat fungsi
anggota informasi() dipanggil dari pointer, ternyata yang ditampilkan adalah fungsi
anggota dari kelas mahluk. Tetapi tidak demikian halnya dengan keterangan().

PUSAT PENGEMBANGAN BAHAN AJAR – UMB Harni Kusniyati ST.


C++
7Modul Bahasa C++, harni_kus@yahoo.com

Mengapa bisa berbeda? Disinilah peranan kata-kunci virtual. Oleh karena


keterangan() diperlakukan sebagai fungsi virtual, pemanggilan :

Binatang → keterangan()

Akan menyebabkan fungsi anggota keterangan() milik kelas mamalia-lah yng


dijalankan mengingat pointer binatang telah diatur untuk menunjuk ke obyek
berkelas mamalia. Hal yang serupa berlaku kalau pointer binatang diatur menunjuk
ke obyek berkelas sapi (yaitu sapi_sumba).

Contoh program polimorfisme:


#include<iostream.h>
class A
{
public:
char*fungsi_statis()
{return("fungsi statis Kelas A");}
char virtual *fungsi_virtual()
{return("fungsi virtual kelas A");}
};
class B : public A
{public:
char* fungsi_statis()
{return("fungsi statis kelas B");}
char *fungsi_virtual()
{return("fungsi virtual kelas B");}
};
class C : public B
{public:
char* fungsi_statis()
{return("fungsi statis kelas C");}
char *fungsi_virtual()
{return("fungsi virtual kelas C");}
};

main ()
{

PUSAT PENGEMBANGAN BAHAN AJAR – UMB Harni Kusniyati ST.


C++
8Modul Bahasa C++, harni_kus@yahoo.com

A*pa;
pa=new A;
cout<<"Objek pa berbentuk objek kelas A"<<endl
<<pa->fungsi_statis()<<endl
<<pa->fungsi_virtual()<<endl<<endl;
delete pa;
pa=new B;
cout<<"Objek pa berbentuk objek kelas B"<<endl
<<pa->fungsi_statis()<<endl
<<pa->fungsi_virtual()<<endl<<endl;
delete pa;
pa=new C;
cout<<"Objek pa berbentuk objek kelas C"<<endl
<<pa->fungsi_statis()<<endl
<<pa->fungsi_virtual()<<endl<<endl;
delete pa;
}

Hasil Eksekusinya adalah:

PUSAT PENGEMBANGAN BAHAN AJAR – UMB Harni Kusniyati ST.


C++

Anda mungkin juga menyukai