Fungsi teman C++ dan Kelas teman
Fungsi teman C++ dan Kelas teman
Dalam tutorial ini, kita akan belajar membuat fungsi teman dan kelas teman di C++ dengan bantuan contoh.
Penyembunyikan data adalah konsep dasar pemrograman berorientasi objek. Ini membatasi akses anggota pribadi dari luar kelas.
Demikian pula, anggota yang dilindungi hanya dapat diakses oleh kelas turunan dan tidak dapat diakses dari luar. Misalnya,
class MyClass {
private:
int member1;
}
int main() {
MyClass obj;
// Error! Cannot access private members from here.
obj.member1 = 5;
}
Namun, ada fitur di C++ yang disebut fungsi teman yang melanggar aturan ini dan mengizinkan kita mengakses fungsi anggota dari luar kelas.
Demikian pula, ada kelas teman juga, yang akan kita pelajari nanti dalam tutorial ini.
Fungsi teman di C++
Fungsi teman dapat mengakses pribadi dan dilindungi data dari sebuah kelas. Kami mendeklarasikan fungsi teman menggunakan friend
kata kunci di dalam badan kelas.
class className {
... .. ...
friend returnType functionName(arguments);
... .. ...
}
Contoh 1:Kerja Fungsi teman
// C++ program to demonstrate the working of friend function
#include <iostream>
using namespace std;
class Distance {
private:
int meter;
// friend function
friend int addFive(Distance);
public:
Distance() : meter(0) {}
};
// friend function definition
int addFive(Distance d) {
//accessing private members from the friend function
d.meter += 5;
return d.meter;
}
int main() {
Distance D;
cout << "Distance: " << addFive(D);
return 0;
}
Keluaran
Distance: 5
Di sini, addFive()
adalah fungsi teman yang dapat mengakses keduanya pribadi dan publik anggota data.
Meskipun contoh ini memberi kita gambaran tentang konsep fungsi teman, itu tidak menunjukkan penggunaan yang berarti.
Penggunaan yang lebih bermakna akan beroperasi pada objek dari dua kelas yang berbeda. Saat itulah fungsi teman bisa sangat membantu.
Contoh 2:Tambahkan Anggota dari Dua Kelas Berbeda
// Add members of two different classes using friend functions
#include <iostream>
using namespace std;
// forward declaration
class ClassB;
class ClassA {
public:
// constructor to initialize numA to 12
ClassA() : numA(12) {}
private:
int numA;
// friend function declaration
friend int add(ClassA, ClassB);
};
class ClassB {
public:
// constructor to initialize numB to 1
ClassB() : numB(1) {}
private:
int numB;
// friend function declaration
friend int add(ClassA, ClassB);
};
// access members of both classes
int add(ClassA objectA, ClassB objectB) {
return (objectA.numA + objectB.numB);
}
int main() {
ClassA objectA;
ClassB objectB;
cout << "Sum: " << add(objectA, objectB);
return 0;
}
Keluaran
Sum: 13
Dalam program ini, ClassA
dan ClassB
telah mendeklarasikan add()
sebagai fungsi teman. Dengan demikian, fungsi ini dapat mengakses pribadi data dari kedua kelas.
Satu hal yang perlu diperhatikan di sini adalah fungsi teman di dalam ClassA
menggunakan ClassB
. Namun, kami belum mendefinisikan ClassB
pada titik ini.
// inside classA
friend int add(ClassA, ClassB);
Agar ini berfungsi, kita memerlukan deklarasi penerusan ClassB
dalam program kami.
// forward declaration
class ClassB;
Kelas teman di C++
Kita juga dapat menggunakan Kelas teman di C++ menggunakan friend
kata kunci. Misalnya,
class ClassB;
class ClassA {
// ClassB is a friend class of ClassA
friend class ClassB;
... .. ...
}
class ClassB {
... .. ...
}
Ketika sebuah kelas dinyatakan sebagai kelas teman, semua fungsi anggota kelas teman menjadi fungsi teman.
Sejak ClassB
adalah kelas teman, kita dapat mengakses semua anggota ClassA
dari dalam ClassB
.
Namun, kami tidak dapat mengakses anggota ClassB
dari dalam ClassA
. Karena hubungan pertemanan di C++ hanya diberikan, tidak diambil.
Contoh 3:Kelas teman C++
// C++ program to demonstrate the working of friend class
#include <iostream>
using namespace std;
// forward declaration
class ClassB;
class ClassA {
private:
int numA;
// friend class declaration
friend class ClassB;
public:
// constructor to initialize numA to 12
ClassA() : numA(12) {}
};
class ClassB {
private:
int numB;
public:
// constructor to initialize numB to 1
ClassB() : numB(1) {}
// member function to add numA
// from ClassA and numB from ClassB
int add() {
ClassA objectA;
return objectA.numA + numB;
}
};
int main() {
ClassB objectB;
cout << "Sum: " << objectB.add();
return 0;
}
Keluaran
Sum: 13
Di sini, ClassB
adalah kelas teman ClassA
. Jadi, ClassB
memiliki akses ke anggota classA
.
Dalam ClassB
, kami telah membuat fungsi add()
yang mengembalikan jumlah numA dan numB .
Sejak ClassB
adalah kelas teman, kita dapat membuat objek ClassA
di dalam ClassB
.