30 likes | 214 Views
http://www.mercubuana.ac.id. 13 POLIMORFISME Polimorfisme (polymorphism) erat kaitannya dengan Pewarisan. Polimorfisme adalah pemikiran bahwa objek dinamis suatu kelas dasar dapat berperilaku seperti kelas
E N D
http://www.mercubuana.ac.id 13 POLIMORFISME Polimorfisme (polymorphism) erat kaitannya dengan Pewarisan. Polimorfisme adalah pemikiran bahwa objek dinamis suatu kelas dasar dapat berperilaku seperti kelas turunan. Ketika objek tersebut menunjuk kelas dasar, objek tersebut berperilaku seperti kelas dasar, tetapi ketika objek tersebut menunjuk kelas turunan, objek tersebut berperilaku seperti kelas turunan. Dalam hal ini objek dapat memiliki beberapa bentuk, tergantung pada saat itu kelas mana yang ditunjuk. Yang perlu menjadi catatan, bahwa perubahan perilaku ini dari kelas dasar kepada kelas turunan, tidak dapat objek kelas turunan menunjuk kelas dasar. Polimorfisme dimungkinkan karena adanya mekanisme ikatan dinamis (dynamic binding). Ikatan dinamis adalah ikatan yang terjadi pada saat program dijalankan (run- time). Ikatan yang terjadi pada saat kompile disebut ikatan statis. Ikatan dinamis hanya dapat terjadi antara suatu objek dinamis dengan metode yang dinamis juga, dalam hal ini metode virtualnya (maya). A. Polimorfisme Pada Pewarisan Tunggal Suatu metode dapat dideklarasikan secara virtual dengan cara menambah kata virtual pada deklarasi fungsi. Jika suatu metode dideklarasikan secara virtual dalam kelas dasar, maka keadaan virtual tetap akan berlaku untuk fungsi yang sama di seluruh kelas turunan meskipun kata virtual tidak disebutkan. Untuk menjelaskan tentang ikatan dinamis dalam hubungannya dengan polimorfisme, perhatikan rancangan kelas berikut ini : class A { public: tipe fungsi_statis(); Kelas Dasar Ikatan Statis tipe virtual fungsi_virtual(); }; class B : public A { public: tipe fungsi_statis(); tipe fungsi_virtual(); }; Ikatan Dinamis 1Modul Bahasa C++, harni_kus@yahoo.com Kelas Turunan
http://www.mercubuana.ac.id 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 () { A*pa; Ikatan Statis Ikatan Dinamis Pa = Objek Dinamis Kelas Turunan 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 Eksekusi: 3Modul Bahasa C++, harni_kus@yahoo.com
http://www.mercubuana.ac.id public: void virtual berlari() {cout<<"berlari cepatnya kuda"<<endl;} }; class burung { public: void virtual terbang() {cout<<"terbang tingginya burung"<<endl;} }; class pegasus: public kuda, public burung { public: void berlari() {cout<<"berlari cepatnya pegasus"<<endl;} void terbang() {cout<<"terbang tingginya pegasus"<<endl;} }; main () { kuda *pkd; pkd=new kuda; cout<<"Sifat-sifat kuda : "<<endl; pkd->berlari(); delete pkd; pkd = new pegasus; cout<<endl<<"Sifat-sifat pegasus : "<<endl; pkd->berlari(); burung *pbr; pbr=new burung; cout<<endl<<"Sifat-sifat kuda : "<<endl; pbr->terbang(); delete pbr; pbr=new pegasus; cout<<endl<<"Sifat-sifat pegasus : "<<endl; pbr->terbang(); } 5Modul Bahasa C++, harni_kus@yahoo.com