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.
contoh program :
#ifndef
MANUSIA_H
#define
MANUSIA_H
Class
Manusia {
public:
virtual
void Hello ( );
};
Class
Pelajar : public Manusia {
public:
void Hello
( );
};
class
Pegawai : public Manusia {
public:
void Hello
( );
};
#endif
Manusia.cpp
#include
“Manusia.h”
#include
void Manusia: :Hello
( ) {
cout<<”Hallo .
. . “<< endl;
}
void Pelajar: :Hello
( ) {
cout<<”Hallo,
Saya Pelajar . . .“<< endl;
}
void Pegawai: :Hello
( ) {
cout<<”Hallo,
Saya Pegawai . . . .“<< endl;
}
MPoli.cpp
#include “Manusia.h”
#include
#include
int main ( ) {
Manusia* m;
int pilihan;
do {
cout<<”l:
Manusia, 2: Pelajar, 3: Pegawai >> “;
cin >> pilihan;
} while ( pilihan < 1 | | pilihan >
3 );
Switch ( pilihan ) {
case 1: m = new
Manusia; break;
case 2: m = new
Pelajar; break;
case 3: m = new
Pegawai; break;
}
m - > Hello ( );
delete m;
return 0;
}
di awal program terdapat #ifndef Manusia_H dan #define
Manusia_H. #ifndef merupakan instruksi processor yang digunakan pada
beberapa porsi variasi compile program secara selektif. Logika yang umum adalah
bahwa jika suatu ekspresi setelah #ifndef adalah benar, maka kode yang
berada diantara instruksi processor tersebut akan tersusun, tapi jika yang
terjadi sebaliknya maka akan terlewati. Sedangkan #define digunakan untuk
melaksanakan substitusi makro dari suatu lembar teks ke lembar teks yang lain
melalui suatu file dimana teks tersebut digunakan. Pada program ini,
terdapat super class, yaitu class Manusia. Batas akses yang
digunakan pada program ini, yaitu public. Suatu class yang mempunyai
virtual method, maka compiler akan membuat suatu VMT (Virtual Method Table)
yang spesifik untuk class tersebut. Virtual Method mempunyai deklarasi (nama,
return type, argumen) fungsi yang sama, namun tidak berada pada lingkup class yang sama dan diawali
dengan keyword virtual. Pada
program pertama, tertulis sebagai berikut :
Virtual
void Hello();
Pada program ini, terdapat dua kelas turunan. Seperti yang sudah
dibahas sebelumnya, pada polimorfisme harus terdapat hirarki pewarisan. Kelas turunan tersebut,
yaitu :
Class Pelajar : public Manusia
Class
Pegawai : public Manusia
#endif digunakan untuk menandai akhir suatu blok.
Selanjutnya, pada Manusia.cpp terdapat #include
“Manusia.h” dan #include #include
akan memerintah compiler untuk membaca dan menyusun file sumber yang lain,
yaitu Manusia.h dan iostream.h. lalu menggunakan binary scope resolution
operator (::) yang berfungsi mengikat nama fungsi ke nama kelas dan
mengidentifikasi fungsi dari suatu kelas tertentu.
Void Manusia::Hello()
Cout<<
digunakan untuk menampilkan keluaran pada program, dimana pada program ini akan
menampilkan
Cout<<”Hallo…”<
Endl digunakan untuk
pindah baris. binary scope resolution operator (::) digunakan juga pada
sub-class pada program ini.
void Pelajar: :Hello ( ) {
cout<<”Hallo, Saya Pelajar . .
.“<< endl;
}
void Pegawai: :Hello ( ) {
cout<<”Hallo, Saya Pegawai . . .
.“<< endl;
Lalu pada MPoli.cpp
terdapat #include “Manusia.h”, #include , dan #include
. header stdlib digunakan untuk prototype fungsi
operasi matematika. Karena pada bagian ini terdapat operator matematika, yaitu
< (kurang dari) dan > (lebih dari).
while ( pilihan < 1 | | pilihan > 3 );
Switch ( pilihan ) {
Int main () menandai dimulainya compiler akan mengeksekusi
program. Dengan kata lain, main
sebagai penanda program utama. Pada bagian ini juga terdapat proses pemilihan,
yaitu :
int pilihan;
do {
cout<<”l:
Manusia, 2: Pelajar, 3: Pegawai >> “;
cin >> pilihan;
} while ( pilihan < 1 | | pilihan > 3 );
Switch ( pilihan ) {
case 1: m = new Manusia; break;
case 2: m = new Pelajar; break;
case 3: m = new Pegawai; break;
}
m - > Hello ( );
delete m;
Return 0; pernyataan tersebut akan menyebabkan fungsi main () menghentikan program dan
mengembalikan nilai ke main. Dalam hal ini, yang dikembalikan adalah nilai 0.
Tidak ada komentar:
Posting Komentar