C++ - Mengenal Friend
By
Rachmat Santoso
—
Senin, 03 Juli 2017
—
Cplusplus
Contoh Program C++ Mengenal Friend |
Seperti kita ketahui bahwa pada OOP bagian private dan protected tidak
dapat diakses oleh fungsi bukan anggota. Namun C++ menyediakan suatu keyword yang memiliki hak 'istimewa' untuk melakukan hal tersebut, yaitu friend.
Perlu diketahui bahwa ketika
suatu fungsi dideklarasikan pada suatu kelas dengan menggunakan keyword friend maka fungsi tersebut berdiri
sebagai fungsi bebas (bukan anggota dari kelas tersebut). Untuk penjelasan lebih lanjut tentang friend
akan disampaikan kembali bersama contoh programnya. Pada postingan ini saya
akan membahas friend function dan friend class.
FRIEND FUNCTION
*maksudnya adalah friend
yang digunakan pada fungsi
Fungsi yang dideklarasikan sebagai friend function dapat kita gunakan
untuk mengakses anggota private dan protected dari suatu kelas.
Bentuk penulisan:
friend <nilai balik +
nama fungsi> (argumen){ ... }
Berikut
adalah contoh program friend function.
/*
C++ - Mengenal Friend
Microsoft visual Studio Express
2012
[RS]
*/
#include <iostream>
#include <conio.h>
using namespace std;
//kelas Nilai
class Nilai
{
private:
int jum;
public:
void inisialisasi(int jumlah);
//friend function
friend void tampilkan(Nilai obj);
};
int main()
{
//penciptaan objek Nilai
Nilai nl;
cout<<"FRIEND FUNCTION"<<endl;
cout<<"-------------"<<endl;
//panggil fungsi 'inisialisasi' anggota dari kelas Nilai
nl.inisialisasi(12);
cout<<"\nMengubah dan menampilkan nilai dengan friend
function"<<endl;
//panggil friend function 'tampilkan' dengan menggunakan
argumen berupa object dari kelas Nilai
tampilkan(nl);
_getche();
return 0;
}
void Nilai::inisialisasi(int jumlah)
{
//pemberian nilai sesuai argumen untuk memanggil fungsi
inisialisasi
jum = jumlah;
cout<<"Nilai awal variabel jum : "<<jum<<endl;
}
void tampilkan(Nilai obj)
{
//mengakses dan mengubah nilai variabel jum
obj.jum = 64;
cout<<"Nilai variabel jum sekarang : "<<obj.jum<<endl;
}
Output
FRIEND FUNCTION
---------------
Nilai awal variabel jum : 12
Mengubah dan menampilkan nilai dengan friend function
Nilai variabel jum sekarang : 64
---------------
Nilai awal variabel jum : 12
Mengubah dan menampilkan nilai dengan friend function
Nilai variabel jum sekarang : 64
Penjelasan
Pada program di atas, friend function ‘tampilkan’ dideklarasikan pada
kelas yang memperbolehkan anggota private dan protectednya boleh diakses oleh
fungsi tersebut, yaitu pada kelas Nilai.
Perhatikan output program, melalui friend function nilai dari variabel ‘jum’
diubah kemudian ditampilkan meskipun di sana tidak ada pewarisan yang dilakukan
oleh kelas Nilai. Walaupun dilakukan pewarisan pun anggota private tetap saja tidak
diwariskan dan tidak dapat diakses di luar kelas Nilai. Itulah hak akses ‘istimewa’
yang dimiliki oleh friend.
Kembali pada code program. Seperti yang saya sampaikan sebelumnya friend
function berdiri sebagai fungsi bebas (bukan anggota dari kelas yang
mendeklarasikan). Oleh karena itu pemanggilan fungsi dan penulisan definisi
fungsi tidak didahului dengan nama objek atau nama kelas. Lagi, jika Anda
menggunakan IDE baru, ketika Anda mengetikan nama objet kemudian diikuti dengan
titik (.), maka varibel-varibel dan fungsi-fungsi yang terdapat di dalam kelas
akan keluar dalam bentuk list. Ketika
saya melakukan hal tersebut menggunakan objek ‘nl’ yang berada di dalam list
hanya varaibel ‘jum’ dan fungsi ‘inisialisasi’, namun nama function friend
‘tampilkan’ tidak muncul. Hal tersebut kembali membuktikan bahwa function
friend tidak menjadi bagian dari suatu kelas.
FRIEND
CLASS
*maksudnya adalah friend
yang digunakan pada class
Apabila
suatu kelas yang dideklarasikan sebagai friend dari kelas lain maka kelas
tersebut dapat untuk mengakses anggota private dan protected dari kelas yang
mendeklarasikannya. Misal kita punya suatu kelas dengan nama kelas B yang
menjadi friend dari kelas A, maka kelas B dapat mengakses anggota private dan
protected dari kelas A (meski tidak
dilakukan pewarisan). Tetapi tidak berlaku sebaliknya. Kelas A tidak dapat
mengakses anggota dari kelas B.
Bentuk penulisan:
friend class <nama_kelas>;
Berikut
adalah contoh program friend class.
/*
C++ - Mengenal Friend
Microsoft visual Studio
Express 2012
[RS]
*/
#include <iostream>
#include <conio.h>
using namespace std;
//kelas GedungA
class GedungA
{
private:
int luasGA;
public:
GedungA(int lsa)
{
luasGA = lsa;
}
friend class GedungB;
};
//kelas GedungB
class GedungB
{
private:
int luasGB;
public:
GedungB(int lsb)
{
luasGB = lsb;
}
void luas_gedungAB(GedungA obj);
};
int main()
{
GedungA gdA(117);
GedungB gdB(53);
cout<<"FRIEND CLASS"<<endl;
cout<<"------------"<<endl;
cout<<endl;
//memanggil fungsi luas_gedungAB dengan argumen berupa
objek dari kelas GedungA
gdB.luas_gedungAB(gdA);
_getche();
return 0;
}
//definisi fungsi luas_gedungAB
void GedungB::luas_gedungAB(GedungA obj)
{
int total;
total = obj.luasGA + luasGB;
cout<<"Luas Gedung A : "<<obj.luasGA<<endl;
cout<<"Luas Gedung B :
"<<luasGB<<endl;
cout<<"------------------- +"<<endl;
cout<<"Total
: "<<total<<endl;
}
Output
FRIEND CLASS
------------
Luas Gedung A : 117
Luas Gedung B : 53
------------------- +
Total : 170
------------
Luas Gedung A : 117
Luas Gedung B : 53
------------------- +
Total : 170
Penjelasan
Seperti yang saya sampaikan sebelumnya, terlihat bahwa kelas GedungB
dapat mengakses anggota private dari kelas Gedung A. Hal tersebut karena kelas
GedungB telah dideklarasikan sebagai friend dari kelas A.
Coba hilangkan friend class GedungB;, maka akan muncul pesan
error pada fungsi ‘luas_gedungAB’ tepatnya ketika pengaksesan variabel luasGA dilakukan. Mengapa demikian? Ingat! Anggota yang bersifat private hanya boleh diakses oleh kelas
yang mendefinisikan saja. Namun, dengan adanya hak ‘istimewa’ yang dimiliki
oleh friend hal tersebut menjadi boleh
untuk dilakukan.
Penting!
Friend
function dan friend class ditempatkan pada kelas yang memperbolehkan anggota
private dan protectednya untuk diakses.
Logikanya sama dengan ketika kita memberi izin kepada teman kita untuk
menggunakan barang milik kita. Kitalah yang berhak memberikan izinnya dan kitalah
yang memberitahukan pada lingkungan bahwa dia adalah teman kita yang sudah kita
izinkan untuk menggunakan barang milik kita.
Baca juga:
C++ - Inheritance (Dasar Pewarisan)
Baca juga:
C++ - Inheritance (Dasar Pewarisan)
[RS]
Klik Like & Share jika postingan ini bermanfaat
Apa tanggapan Anda?
Berikan tanggapan Anda melalui kolom komentar yang telah disediakan.
- Gunakan bahasa yang sopan;
- Saat menjadikan postingan pada blog ini sebagai referensi, jangan lupa mencantumkan sumbernya (link dari blog ini).
Jika blog ini bermanfaat jangan lupa memberikan 'like' atau 'share' untuk mendapatkan update terbaru.
Terima kasih