Penjelasan Friend Keyword
Friend adalah keyword yang memungkinkan sebuah non-member function dari class tersebut dapat mengakses member yang bersifat private dan protected. Friend keyword juga dapat digunakan di dalam class.
Di bawah ini merupakan penjelasan dari friend pada class dan friend pada function:
Friend Class
Friend class adalah class yang memiliki hak spesial kepada class lainnya yang mendeklarasikan class tersebut sebagai friend class, class tersebut akan memiliki kemampuan mengakses member dari class yang bersifat hak akses private dan protected.
Contoh Penulisan:
class nama_class2; //Deklarasi Class nama_class2 class nama_class{ public: friend class nama_class2; //Deklarasi Friend Class }; class nama_class2{ //Definisi Class nama_class2 };
Seperti apa yang dicontohkan di atas, untuk membuat class lain menjadi friend dari class tersebut atau dengan kata lain, membuat class lain dapat mengakses semua member dari class tersebut.
Untuk menyatakannya cukup seperti kita mendirikan sebuah class tanpa definisi tapi dengan menaruh keyword friend
di awal.
Bentuk Penulisan:
Friend class nama_class2; //deklarasi friend class
Contoh program:
#include <iostream> #include <string> using namespace std; class siswa; class orang{ private: string nama; public: void setNama(string pNama); friend class siswa; }; class siswa{ private: int id; public: void setId(int pId); void displayAll(orang &a); }; void siswa::displayAll(orang &a){ cout<<id<<endl<<a.nama; } void orang::setNama(string pNama){ nama = pNama; } void siswa::setId(int pId){ id=pId; } int main(){ orang budi; budi.setNama("Budi Komaa"); siswa budi_siswa; budi_siswa.setId(1); budi_siswa.displayAll(budi); return 0; }
Di atas adalah contoh program dari penggunaan keyword friend
, yang digunakan untuk menampilkan keluaran nilai member dari dua object.
Pada awal sebelum class orang
, didirikan class prototype, yang menyatakan bahwa class siswa
akan di definisikan dan anda bisa memanggilnya meskipun definisi class tersebut berada di bawah pemanggilan.
Friend class siswa
tersebut didirikan di dalam class orang
, yang berarti class siswa
dapat mengakses member private dan protected dari class orang
.
Friend Function
Friend Function adalah function yang memiliki kemampuan spesial kepada class yang mendeklarasikan function tersebut sebagai friend, function tersebut akan memiliki kemampuan mengakses member dari class tersebut yang bersifat hak akses private dan protected.
Bentuk Penulisan:
friend void printNama ();
Untuk membuat friend function dibutuhkan keyword friend
di depan deklarasi function, seperti apa yang di contohkan di atas.
Contoh Penulisan:
class siswa{ private: string nama; public: friend void setNama(siswa a,string pnama){ a.nama = pnama; } };
Note: Friend function yang ada di dalam class bukan merupakan bagian dari anggota class.
Di atas adalah contoh penulisan dari friend function, pada parameter tersebut terdapat parameter yang merupakan object digunakan untuk melakukan akses kepada member object yang dimaksud.
Contoh program:
#include <iostream> #include <string> using namespace std; class siswa{ private: string nama; public: friend void setNama(siswa &a,string); }; void setNama(siswa &a, string pNama){ a.nama = pNama; } int main(){ siswa budi; setNama(budi,"Budi Komaa"); return 0; }
Terdapat dua jenis friend function, yang pertama dan yang di atas adalah friend function yang didefinisikan sebagai global function dan kedua adalah friend function yang merupakan member dari class lain, berikut adalah contohnya.
Contoh program:
#include <iostream> class pelajar; class manusia{ public: void showNilaiPelajar(pelajar& ); }; class pelajar{ private: int nilai; public: pelajar() { nilai = 100; } friend void manusia::showNilaiPelajar(pelajar& x); }; void manusia::showNilaiPelajar(pelajar &x){ std::cout <<x.nilai; } int main(){ manusia budi; pelajar pbudi; budi.showNilaiPelajar(pbudi); return 0; }
Ada beberapa hal penting mengenai friend class dan function:
- Fitur friend tidak bisa digunakan sembarangan, biasanya jika terlalu banyak penggunaan fitur friend maka akan mengurangi nilai dari konsep enkapsulasi pada object-oriented programming.
- Friend bukan bagian dari pewarisan (inheritance).
- Friend tidak memiliki balasan, jika class
A
menyatakan friend pada classB
, bukan berarticlass
B
menganggap classA
friend secara otomatis.