Friend class PEMROGRAMAN BERORIENTASI OBJEK

2008 | Direktorat Pembinaan SMK 555 sqr.set_side 4 ; rect.convertsqr; cout Hasilnya = rect.area \n ; system PAUSE ; return EXIT_SUCCESS; } Keluaran program diatas adalah sebagai berikut: Hasilnya = 16 Dalam contoh ini kita mendeklarasikan CRectangle sebagai friend dari CSquare, sehingga CRectangle dapat mengakses member private dan protected yang dimiliki class CSquare, yakni CSquare::side, yang mendefinisikan lebar dari segiempat. Kita juga melihat adanya instruksi baru di awal program, yakni class CSquare; yang merupakan prototype dari class CSquare. Hal ini diperlukan karena dalam deklarasi CRectangle kita mengacu kepada CSquare sebagai parameter dalam fungsi convert . Definisi CSquare disertakan di bagian akhir, sehingga jika kita tidak mengikutkan prototype CSquare diawal class instruksi tersebut akan dianggap salah tidak dikenali. Perhatikan bahwa penggunaan friend tidak akan berfungsi jika kita tidak menuliskannya secara eksplisit. Dalam contoh CSquare, CRectangle tidak dianggap sebagai suatu friend class, sehingga CRectangle dapat mengakses member private dan protected milik CSquare tetapi tidak sebaliknya. Agar dua buah class dapat saling mengakses member private dan protected nya maka keduanya harus dideklarasikan sebagai friend class dari yang lain seperti pada contoh berikut: Program 16.23 include iostream.h include conio.h class contoh { int x; public: void fcontoh1 ; void fcontoh2 ; friend class cth; }; class cth { int y; 556 Direktorat Pembinaan SMK | 2008 void fcth; public: void fcth1 ; friend class contoh; }; void cth::fcth { contoh d; d.x= 5 ; cout \nFungsi cth anggota class cth private ; cout \nNilai x = d.x; } void contoh::fcontoh1 { x= 3 ; cout Fungsi contoh 1 anggota class contoh ; cout \nNilai x = x;} void contoh::fcontoh2 { cth m; m.y= 5 ; cout \n\nFungsi contoh 2 anggota class contoh ; cout \nNilai x = x; cout \nNilai y = m.y; m.fcth;} void cth::fcth1 { y= 3 ; cout \n\nFungsi cth 1 anggota class cth ; cout \nNilai y = y; fcth; } main { contoh a; cth b; a.fcontoh1; a.fcontoh2; b.fcth1; getch; } 2008 | Direktorat Pembinaan SMK 557 Keluaran program diatas adalah sebagai berikut: Fungsi contoh 1 anggota class contoh Nilai x = 3 Fungsi contoh 2 anggota class contoh Nilai x = 3 Nilai y = 5 Fungsi cth anggota class cth private Nilai x = 5 Fungsi cth 1 anggota class cth Nilai y = 3 Fungsi cth anggota class cth private Nilai x = 5

16.6. Inheritance

Salah satu hal penting dalam class adalah inheritance. Inheritance mengijinkan kita untuk membuat objek yang diturunkan dari objek lain, sehingga dimungkinkan didalamnya terdapat member lain selain membernya sendiri. Sebagai contoh, misalnya kita ingin mendeklarasikan sederetan class yang mendeskripsikan polygon seperti CRectangle atau CTriangle. Keduanya dapat dideskripsikan dengan dua atribut yakni : alas dan tinggi. Hal ini dapat direpresentasikan dengan class CPolygon dan dari class tersebut diturunkan dua class yakni CRectangle dan CTriangle. Class CPolygon berisi member yang umum pada semua polygon, dalam contoh ini adalah panjang dan lebar width dan height. CRectangle dan CTriangle diturunkan dari class tersebut. Class yang diturunkan dari class lain mewarisi semua member yang ada dalam class dasarnya. Hal ini berarti bahwa jika class dasarnya memiliki member A dan kita menurunkannya ke class lain yang memiliki member B, maka class turunan akan terdiri dari A dan B. Untuk menurunkan class dari yang lain, kita menggunakan operator : colon dalam deklarasi class turunan dengan cara sebagai berikut: class derived_class_name: public base_class_name; dimana derived_class_name adalah nama class turunan dan base_class_name adalah nama class yang menjadi dasar. Public dapat diganti dengan akses lain misalnya protected atau private, dan menjelaskan akses untuk member yang diturunkan, seperti kita dapat lihat pada contoh berikut: Program 16.24 558 Direktorat Pembinaan SMK | 2008 include cstdlib 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 \nHasil pemanggilan fungsi area oleh rect= rect.area; cout \nHasil pemanggilan fungsi area oleh trgl = trgl.area; system PAUSE ; return EXIT_SUCCESS; } Keluaran program diatas adalah sebagai berikut: Hasil pemanggilan fungsi area oleh rect= 20 Hasil pemanggilan fungsi area oleh trgl = 10 Sebagaimana kita lihat objek class CRectangle dan CTriangle masing-masing berisi member dari class CPolygon yakni : width, height dan set_values. Protected mirip dengan private, perbedaan hanya terjadi pada class turunan. Ketika kita menurunkan class, member protected dari class dasar dapat digunakan oleh member lain dalam