Friend Functions (friend keyword)

Terdapat tiga macam proteksi bagi member class, yakni : public, protected dan private. Member protected dan private tidak bisa diakses dari luar class dimana dia dideklarasikan. Walaupun demikian aturan ini dilanggar dengan adanya friend di dalam class, sehingga kita dapat membuat fungsi eksternal untuk mengakses member private dan protected.

Untuk itu kita mendeklarasikan prototype fungsi eksternal yang dimaksud yang akan menambah akses sebelumnya dengan instruksi friend di dalam deklarasi class yang dapat dishare oleh semua member. Perhatikan contoh berikut dimana kita mendeklarasikan friend function duplicate:

Contoh :

// friend functions

#include <iostream.h>

class CRectangle {

int width, height;

public:

void set_values (int, int);

int area (void) {return (width * height);}

friend CRectangle duplicate (CRectangle);

};

void CRectangle::set_values (int a, int b) {

width = a;

height = b;

}

CRectangle duplicate (CRectangle rectparam)

{

CRectangle rectres;

rectres.width = rectparam.width*2;

rectres.height = rectparam.height*2;

return (rectres);

}

int main () {

CRectangle rect, rectb;

rect.set_values (2,3);

rectb = duplicate (rect);

cout << “Hasil nya = “<<rectb.area();

}

Dari fungsi duplicate yang merupakan friend dari CRectangle, kita dapat mengakses member width dan height dari objek yang berbeda dalam tipe CRectangle. Perhatikan bahwa fungsi duplicate() bukan merupakan anggota dari class CRectangle

Dengan friend function fungsi yang bukan merupakan anggota class (diluar class) dapat mengakses member class yang sifatnya private protected. Secara umum penggunaan fungsi friend kelihatannya keluar dari metodologi OOP, sehingga selama masih memungkinkan lebih baik menggunakan member yang classnya sama untuk masalah ini. Seperti pada contoh sebelumnya, akan lebih sederhana jika duplicate() diletakkan dalam class CRectangle.

Contoh :

//friend function

#include <iostream.h>

#include <conio.h>

class contoh {

int x;

void fcontoh();

public:

void fcontoh1 ();

void fcontoh2 ();

friend void fcontoh3 ();

};

void contoh::fcontoh()

{ cout<<“\nFungsi fcontoh anggota class contoh, bersifat private”;

}

void contoh::fcontoh1()

{ x=3;

cout<<“Fungsi contoh 1 anggota class contoh”;

fcontoh();

cout<<“\nNilai x = “<<x;}

void contoh::fcontoh2()

{ cout<<“\n\nFungsi contoh 2 anggota class contoh”;

cout<<“\nNilai x = “<<x;}

void fcontoh3()

{ contoh b;

b.x=10;

cout<<“\n\nFungsi contoh 3 bukan anggota class contoh”;

cout<<“\ntetapi merupakan fungsi friend dari class contoh”;

cout<<“\nsehingga dapat mengakses x yang sifatnya private”;

cout<<“\ndan mengakses fcontoh yang juga bersifat private”;

b.fcontoh();

cout<<“\nNilai x = “<<b.x;}

main () {

contoh a;

a.fcontoh1();

a.fcontoh2();

fcontoh3();

getch();

}

Satu Tanggapan

  1. thnx boz membantu sekali, meski kurang lengkap datanya….

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: