Polymorphism Virtual Function
Pointers ke base class
Hal yang diperlukan untuk mendukung polimorpisme adalah kemampuan untuk
mengakses ke suatu objek tanpa memperhatikan jumlah memori objek tersebut. Oleh
karena itu pada kasus polimorpisme tidak dapat digunakan variabel biasa. Karena
variabel tersebut berhubungan dengan memori, dan memori yang diperlukan oleh
masing-masing objek pasti berlainan. Tetapi pointer dan reference dilain pihak
mengakses ke suatu objek berdasarkan alamat. Dan seperti diketahui memori yang
digunakan untiuk menyimpan suatu alamat adalah sama besar untuk setiap objek.
Untuk melakukan run-time polimorpisme ini, akan lebih difokuskan pada penggunaan variabel pointer yang dapat memilki fleksibilitas yang lebih tinggi dari pada reference.// pointers to base class#include <iostream> class CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b; } }; class CRectangle: public CPolygon { public: int area () { return (width * height); } }; class CTriangle: public CPolygon { public: int area () { return (width * height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon * x = ▭ //pointer x sebagai objek CPolygon CPolygon * y = &trgl; x->set_values (4,5); y->set_values (4,5); cout << rect.area() << endl; cout << trgl.area() << endl; return 0;}
Sebelum
membahas ssesi ini, sangat diharapkan anda memahami terlebih dahulu pembahasan
mengenai pointers dan class
inheritance. Beberapa hal di bawah ini yang harus mendapatkan perhatian
yang mendalam.
Pointers ke base class
Untuk melakukan run-time polimorpisme ini, akan lebih difokuskan pada penggunaan variabel pointer yang dapat memilki fleksibilitas yang lebih tinggi dari pada reference.// pointers to base class#include <iostream> class CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b; } }; class CRectangle: public CPolygon { public: int area () { return (width * height); } }; class CTriangle: public CPolygon { public: int area () { return (width * height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon * x = ▭ //pointer x sebagai objek CPolygon CPolygon * y = &trgl; x->set_values (4,5); y->set_values (4,5); cout << rect.area() << endl; cout << trgl.area() << endl; return 0;}
OUTPUT:
10
20
Penjelasan Program
Pada fungsi utama,
terdapat 2 pointer yang menunjuk objek
dari kelas CPolygon (x dan y). x berisi alamat dari rect dan y berisi alamat dari trgl .
Jika dilihat kedua objek tersebut (rect dan trgl) merupakan objek
turunan dari CPolygon, maka keduanya memiliki valid assignations.
Pointer pada base class
dapat menunjuk ke objek pada derived class, tetapi pointer tersebut hanya dapat
mengakses bagian derived yang diturunkan dari base class. Karena secara logika,
base class tidak mungkin mengetahui data tambahan pada derived class.
Sebaliknya pointer pada
derived class, tidak mungkin dapat digunakan untuk menunjuk pada base class.
Namun dapat digunakan type cast agar
pointer pada derived class dapat digunkan untuk menunjuk ke objek base class.
Penggunaan type cast tidak disarankan karena dapat mengakibatkan kehilangan/
kerusakan data.
0 Komentar untuk "Polymorphism Virtual Function"