Polymorphism dan Virtual Function Pada Classes C++

posted in: Pemrograman C++ | 2

Polymorphism Pada Classes

Pada tutorial sebelumnya, kamu sudah bermain-main dengan pointer pada suatu kelas. Pada konteks ini, suatu pointer bertipe kelas induk dapat menunjuk pada kelas anak. Polymorphism merupakan mekanisme atau cara dalam memanfaatkan secara maksimal sifat tersebut. Ketika kamu memiliki kelas anak yang merupakan turunan dari kelas induk, pointer bertipe kelas induk, dapat kamu gunakan sebagai menunjuk objek dari kelas anak.

Berikut merupakan contoh sintaks sederhana mengenai polymorphism:

class induk
{
   //member
};
class anak: public induk
{
   //member
};
int main(){
   induk *pointer_anak;
   anak objek_anak;
   pointer_anak = &objek_anak 
}

Dari permisalan di atas, kita ketahui bahwa terdapat kelas anak yang menginduk pada kelas induk. Kemudian pada fungsi main(), terdapat deklarasi pointer bertipe kelas induk yang digunakan sebagai penunjuk objek kelas anak.

Berikut Mimin menggunakan kode program pada tutorial inheritance dalam mencontohkan mekanisme polymorphism.

#include <iostream>
using namespace std;

class induk{
protected:
 int sisi_a,sisi_b;
public:
 void input(float panjang, float lebar);
};

void induk::input(float panjang, float lebar){
sisi_a = panjang;
sisi_b = lebar;
}

class anak:public induk{
public:
 float luas(){return sisi_a*sisi_b;};
};

int main(){
 induk *pointerAnak;
 anak o;
 pointerAnak = &o;
 pointerAnak->input(9,8);
 cout<<"Nilai dari o.luas() adalah = "<<o.luas()<<endl;
 return 0;
}

Sekarang, Mimin tidak akan mengulang lagi penjelasan mengenai fungsi masing-masing kelas pada program di atas. Silakan simak tutorial inheritance dalam memahami kembali mekanisme pewarisan pada kelas. Bahasan utama pada program di atas adalah mengenai mekanisme polymorphism yang dapat kamu lihat pada fungsi main() terutama pada pointer bertipe kelas induk.

Pada baris 24, dapat kamu lihat bahwa pointer kelas induk, digunakan sebagai penunjuk objek kelas anak guna mengakses member kelas anak seperti fungsi input pada baris 25. Berikut output program yang Mimin dapatkan:

polymorphism-classes-cpp

Virtual Function

Sebelum membahas masalah Virtual Function, dari mekanisme polymorphism di atas, dapatkah kamu menemukan kejanggalan? Coba kamu lihat kode program baris 26. Kenapa akses member luas pada kelas anak masih menggunakan objek dari kelas anak sendiri Min? Kenapa tidak menggunakan pointer yang sudah dibuat? Ah paling mimin lupa akses member pake pointer? 🙂 . Masih ngeyel? Perlu bukti? oke sekarang mimin buktikan. Coba kita ubah baris 26 menggunakan pointer dan lakukan kompilasi:

polymorphism-classes-cpp-error

Nah kan, terlihat hasil kompilasi terdapat error pada baris 26. Berikut bunyi pesan errornya:

polymorphism-classes-cpp-error2

Error diatas merupakan kekurangan yang akan Mimin perbaiki dengan menggunakan virtual function. Di dalam kelas pemrograman c++, terdapat member khusus yang apabila dideklarasikan di kelas induk, dapat dideklarasikan lagi di kelas anak-anaknya, dengan kegunaan fungsi yang berbeda pada masing-masing kelas. Member ini disebut sebagai virtual member yang hanya dideklarasikan sebagai virtual pada kelas induk.

Berikut adalah sintaks pemrograman di atas ketika diaplikasikan dengan menggunakan virtual member/virtual function. 

#include <iostream>
using namespace std;

class induk{
protected:
 int sisi_a,sisi_b;
public:
 void input(float panjang, float lebar);
 virtual float luas(){return 0;}; //Virtual Function
};

void induk::input(float panjang, float lebar){
sisi_a = panjang;
sisi_b = lebar;
}

class anak:public induk{
public:
 float luas(){return sisi_a*sisi_b;};
};

int main(){
 induk *pointerAnak;
 anak o;
 pointerAnak = &o;
 pointerAnak->input(9,8);
 cout<<"Nilai dari pointerAnak->luas() adalah = "<<pointerAnak->luas()<<endl;
 return 0;
}

Sekarang dapat kamu lihat, Mimin tambahkan pada baris 9 berupa virtual function luas(), mekanisme ini membuat member fungsi luas() pada kelas anak dapat dikenali oleh pointer bertipe induk. Hal ini dimungkinkan karena adanya virtual function yang membuat pointer lebih memilih objek yang ditunjuk daripada kelas induk yang diwakili. Yang harus kamu ingat adalah ini bukan mekanisme prototyping.

Berikut adalah output program yang mimin dapatkan:

polymorphism-classes-cpp-virtual

 

“Ilmu tak akan habis jika dibagi, tidak seperti harta”

Salam sinauarduino.com

2 Responses

  1. Makasih mas, jelas banget.

Leave a Reply