Home > Ren's Free Time > Friend pada C++

Friend pada C++

Friend pada C++ adalah suatu entitas diluar suatu class yang mempunyai akses untuk mengakses anggota class ( method, varible ) baik yang memiliki modifier private dan protected. Friend C++ dapat berupa  function dan class, friend yang berupa function disebut friend fuction dan friend yang berupa class disebut dengan friend class

1.friend class

  • friend class hanya bersifat satu arah.
  • syntax: friend class X; dan dapat dituliskan pada bagian mana saja dari class yang akan menjadi friend.
  • previledge dari friend class tidak di- diturunkan

Contoh sederhana dari friend class pada C++ sebagai berikut:

#include <iostream>
using namespace std;

class CSquare;

class CRectangle {
int width, height;
public:
int area ()
{return (width * height);}
void convert (CSquare a);
};

class CSquare {
private:
int side;
public:
void set_side (int a)
{side=a;}
friend class CRectangle;
};

void CRectangle::convert (CSquare a) {
width = a.side;
height = a.side;
}

int main () {
CSquare sqr;
CRectangle rect;
sqr.set_side(4);
rect.convert(sqr);
cout << rect.area();
return 0;
}

P.S :  Yang dimaksud dengan hanya satu arah adalah pada contoh diatas class CRectangle dapat mengakses data pada class CSquare dan tidak sebaliknya.

2.friend function

  • sysntax untuk friend function : friend return_type function_name();  contoh friend void cetakNilai( int nilai);. identifier friend hanya digunakan pada pendeklarasian fungsi tidak pada pendefenisian fungsi.
  • fungsi dapat dipanggil tanpa menggunakan object dari suatu class
  • friend function dapat memiliki identier public atau private

Contoh sederhana dari friend fucntion pada C++ sebagai berikut. Biarkan kode yang berbicara.😀

#include <iostream>
using namespace std;
class CRectangle{
private:
int width, height;
public:
void set_values (int, int);
int area () {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 rectA, rectB;
rectA.set_values ( 4, 4);
cout << " wide A:" << rectA.area()<< "\n";
rectB = duplicate ( rectA);
cout << " wide B:" << rectB.area() <<"\n";
}

Dari contoh contoh diatas, sepertinya friend dapat merusak konsep enkapsulasi dari OOP. Setelah saya membaca sedikit referensi, friend tidak merusak konsep enkapsulasi jika digunakan secara benar. ( Sepertinya ini perlu untuk didalami lagi😀 )

Semoga bermanfaat.

Referensi : dari berbagai sumber😀

  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: