berbagi seputar ilmu pengetahuan dan teknologi

Polymorphism Virtual Function

Polymorphism  Virtual Function


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
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 = &rect; //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.
 

Tag : C, C++
0 Komentar untuk "Polymorphism Virtual Function"

Back To Top