Class Basis Virtual PEMROGRAMAN BERORIENTASI OBJEK

566 Direktorat Pembinaan SMK | 2008 tanaman : i , f {cout tanaman.\n ; } tanaman int init_i,float init‐f:iinit‐i,finit‐f {cout tanamanint,float.\n ; } ~tanaman {cout ~tanaman.\n ; } void print; private : int i; float f; }; void tanaman :: print { cout i= i endl; cout f= f endl; } class buah : virtual public tanaman { public : buah int init_j, float init_g : jinit_j, ginit_g {cout buah int,float.\n ; } ~buah { cout ~buah.\n ; } void print; private : int j; float g; }; void buah :: print { tanaman :: print; cout j= j endl; cout g= g endl; } class sayur : public virtual tanaman { public : sayur int init_k,float init_h : kinit_k, hinit‐h {cout sayurint,float.\n ; } ~sayur {cout ~sayur.\n ; } void print; private : int k; 2008 | Direktorat Pembinaan SMK 567 float h; }; void sayur :: print { tanaman :: print ; cout k= k endl; cout h= h endl; } class tomat : public buah, public sayur { public : tomat int init_l, float init_m : buahinit_l, init_m, sayurint init_l, init_m, linit_l+ 2 , minit_m + 2.1 {cout tomat int,float.\n ; } ~tomat { cout ~tomat.\n ; } void print; private: int l; float m; }; void tomat :: print { tanaman :: print; buah :: print; sayur :: print; cout l= l endl; cout m= m endl; } main { tanaman pt = new tanaman 2 , 3.1 ; cout pt ? print: \n ; pt? print; delete pt; cout endl; buah pb = new buah 2 , 3.1 ; cout pb? print :\n ; pb?print; delete pb; cout \n ; sayur ps = new sayur 2 , 3.1 ; 568 Direktorat Pembinaan SMK | 2008 cout ps ?print :\n ; ps ? print; delete ps; cout endl; tomat pto = new tomat 2 , 3.1 ; cout pto ?print: \n ; pto ? print; delete pto; return ; } Keluaran program diatas adalah sebagai berikut: tanaman int,float. pt →print: i=2 f=3.1 ~tanaman. tanaman. buahint,float. pb →print: i=0 f=0 j=2 g=3.1 ~buah. ~tanaman. tanaman. sayurint,float. ps →print: i=0 f=0 k=2 h=3.1 ~sayur. ~tanaman. tanaman. buahint,float. sayurint,float. tomatint,float. pto →print: i=0 2008 | Direktorat Pembinaan SMK 569 f=0 i=0 f=0 j=2 g=3.1 i=0 f=0 k=2 h=3.1 l=4 m=5.2 ~tomat. ~sayur. ~buah. ~tanaman. Konstruktor class basis virtual selalu dijalankan sebelum konstruktor class basis nonvirtual, tak peduli posisinya dalam derivation-list. Sedangkan urutan destruktor sebaliknya, dan jika suatu class turunan melibatkan sekaligus instance public dan instance private dari suatu class basis virtual,maka yang menang adalah instance public. Program16.28 class tanaman { public : void habitat; protected: short tinggi; }; class buah : public virtual tanaman {...}; calss sayur : private virtual tanaman {...}; class nangka : public buah, public sayur {...};

16.8. Inheritance between class

Inheritance memungkinkan kita untuk membuat objek dari objek sebelumnya, sehingga memungkin- an untuk menyertakan beberapa anggota objek sebelumnya ditambah dengan anggota objeknya sendiri. Contoh, membuat class untuk mengetahui apakah segi empat CRectangle, atau CTriangle. Masing-masing mempunyai hal yang sama yaitu, dasar dan tinggi. Dapat direpresentasikan dengan class CPolygon kemudian diturunkan menjadi CRectangle dan CTriangle. Class CPolygon dapat berisi anggota yang dipakai untuk setiap polygon, dalam hal ini width dan height, dan CRectangle dan 570 Direktorat Pembinaan SMK | 2008 CTriangle adalah class turunannya. Class turunan akan menurunkan seluruh anggota yang dimiliki oleh class dasarparentnya. Jadi jika class paret mempunyai anggota A dan diturunkan pada class lain dengan anggota B,maka clas turunan ini akan memiliki A dan B. Untuk menurunkan class, menggunakan operator : colon pada saat deklarasi, syntax : class derived_class_name: public base_class_name; Dimana derived_class_name adalah nama dari derived class dan base_class_name adalah nama dari class asal. public dapat digantikan dengan tipe akses lainnya : protected atau private, Perhatikan contoh program dibawah ini : Program 16.29 include iostream.h 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 void { return width height; } }; class CTriangle: public CPolygon { public: int area void { return width height 2 ; } }; int main { CRectangle rect; CTriangle trgl; rect.set_values 4 , 5 ; trgl.set_values 4 , 5 ; cout rect.area endl; cout trgl.area endl; system PAUSE ;