POLIMORFISME
Fungsi Virtual Fungsi virtual adalah fungsi anggota yang dideklarasikan dengan menggunakan keyword “Virtual” Guna fungsi virtual: Misal pada kelas dasar terdapat fungsi virtual. Kemudian fungsi tersebut dideklarasikan lagi pada kelas turunan. Misalnya lagi sebuah pointer diciptakan untuk menunjuk ke kelas dasar. Selanjutnya pointer dapat memilih obyek yang tepat kalau fungsi anggota virtual tersebut dipanggil melalui pointer Contoh: 1. Kegunaan fungsi virtual – definisi fungsi didalam kelas (virtual1.cpp) 2. Kegunaan fungsi virtual – definisi fungsi diluar kelas (virtual2.cpp)
Keterangan Fungsi Virtual Fungsi virtual halo() didefinisikan di kelas OrangTua (kelas dasar) Fungsi halo() juga didefinisikan di kelas Anak dan kelas Cucu Sebuah pointer ot1 diciptakan yang bertipe OrangTua Pointer kemudian diatur untuk menunjuk ke obyek anak1 yang bertipe Anak Ketika fungsi anggota lihat() dipanggil dari pointer, ternyata yang muncul adalah fungsi lihat() dari kelas OrangTua Ketika fungsi anggota halo() dipanggil dari pointer, ternyata yang muncul adalah fungsi halo() dari kelas Anak Hal ini terjadi karena halo() adalah fungsi virtual Hal serupa juga terjadi ketika pointer menunjuk ke obyek cucu1
Polimorfisme Polimorfisme berarti mempunyai banyak bentuk Salah satu bentuk polimorfisme adalah overloading terhadap fungsi dan operator Polimorfisme semacam ini disebut polimorfisme saat kompilasi (compile time polimorphism) Bentuk polimorfisme lainnya adalah polimorfisme saat eksekusi (execution time polimorphism), disebut juga late binding atau dynamic binding Polimorfisme macam ini mampu menangani dua atau lebih obyek pada saat eksekusi dengan menyesuaikan terhadap lingkungan obyek yang bersangkutan Contoh program virtual1.cpp dan virtual2.cpp menunjukkan hal ini
Fungsi Virtual Murni Fungsi virtual pada kelas dasar tidak pernah diakses sehingga tidak berguna Hal ini karena tidak pernah ada penciptaan obyek dari kelas dasar Contoh: Fungsi halo() pada kelas OrangTua tidak pernah diakses karena obyek berkelas OrangTua tidak pernah diciptakan Karena tidak berguna, isi fungsi virtual bisa dihapus dengan cara menambahkan = 0 setelah tanda () virtual void halo() = 0; Fungsi virtual tanpa isi disebut dengan fungsi virtual murni
Fungsi Virtual Murni Contoh: 3. Fungsi virtual murni – definisi fungsi didalam kelas (virmurn1.cpp) 4. Fungsi virtual murni – definisi fungsi diluar kelas (virmurn2.cpp)
Kelas Abstrak Kelas Abstrak adalah kelas yang dideklarasikan namun tidak untuk menciptakan obyek Ciri kelas abstrak: Mengandung paling tidak satu fungsi virtual murni Contoh: Kelas OrangTua pada contoh program merupakan kelas abstrak Kelas abstrak tidak dapat dipakai untuk menciptakan obyek, sehingga pernyataan berikut tidak diperkenankan: OrangTua ot1; Namun penciptaan pointer bertipe kelas abstrak bisa dilakukan: OrangTua *ot1;
Kelas Dasar Virtual Gambar pewarisan bertingkat Bisa terjadi masalah pada kelas Cucu bila pendeklarasian dilakukan seperti pada contoh didepan
Kelas Dasar Virtual Contoh: Misal pada kelas OrangTua terdapat anggota data “nama” bertipe protected. Anggota data ini akan diwariskan ke Anak1 dan Anak2. Karena kelas Cucu merupakan gabungan dari kelas Anak1 dan Anak2, maka akan terdapat dua anggota data “nama” pada kelas Cucu. Cara mengatasi : dengan menggunakan keyword virtual pada saat pendeklarasian kelas turunan class Anak1 : virtual public OrangTua{}; class Anak2 : virtual public OrangTua{}; Dengan menggunakan keyword virtual, hanya akan terdapat satu anggota data untuk kedua kelas turunan
Kelas Dasar Virtual Contoh: 5. Pewarisan dengan menggunakan keyword virtual (wrsvirtu.cpp)
Latihan Buatlah program yang berisi menu untuk menghitung luas dari berbagai macam bangun dengan menggunakan fungsi virtual Buatlah program yang berisi menu untuk melakukan berbagai macam operasi aritmatika dengan menggunakan fungsi virtual