Fungsi dan Kelas Teman C ++ (Dengan Contoh)

Dalam tutorial ini, kita akan belajar membuat fungsi teman dan kelas teman di C ++ dengan bantuan contoh.

Menyembunyikan 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. Sebagai contoh,

 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 memungkinkan kita mengakses fungsi anggota dari luar kelas.

Demikian pula, ada kelas teman juga, yang akan kita pelajari nanti di tutorial ini.

Fungsi teman di C ++

Sebuah fungsi teman dapat mengakses pribadi dan dilindungi data kelas. Kami mendeklarasikan fungsi teman menggunakan friendkata kunci di dalam tubuh kelas.

 class className (… friend returnType functionName(arguments);… )

Contoh 1: Bekerja dengan Teman Fungsi

 // C++ program to demonstrate the working of friend function #include 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

 Jarak: 5

Di sini, addFive()adalah fungsi teman yang dapat mengakses data pribadi dan publik anggota.

Meskipun contoh ini memberi kita gambaran tentang konsep fungsi teman, itu tidak menunjukkan penggunaan yang berarti.

Penggunaan yang lebih berarti akan beroperasi pada objek dari dua kelas yang berbeda. Saat itulah fungsi teman bisa sangat membantu.

Contoh 2: Tambah Anggota dari Dua Kelas Berbeda

 // Add members of two different classes using friend functions #include 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

 Jumlah: 13

Dalam program ini, ClassAdan ClassBtelah dinyatakan add()sebagai fungsi teman. Dengan demikian, fungsi ini dapat mengakses data privat kedua kelas.

Satu hal yang perlu diperhatikan di sini adalah fungsi teman di dalamnya ClassAmenggunakan ClassB. Namun, kami belum mendefinisikannya ClassBsaat ini.

 // inside classA friend int add(ClassA, ClassB);

Agar ini berhasil, kami membutuhkan deklarasi ke depan ClassBdalam program kami.

 // forward declaration class ClassB;

Teman Kelas di C ++

Kita juga bisa menggunakan kelas teman di C ++ menggunakan friendkata kunci. Sebagai contoh,

 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.

Karena classBmerupakan kelas teman, kita dapat mengakses semua anggota classAdari dalam classB.

Namun, kami tidak dapat mengakses anggota ClassBdari dalam classA. Karena relasi teman di C ++ hanya diberikan, bukan diambil.

Contoh 3: Kelas teman C ++

 // C++ program to demonstrate the working of friend class #include 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

 Jumlah: 13

Di sini, ClassBadalah teman sekelas ClassA. Jadi, ClassBmemiliki akses ke anggota classA.

Di ClassB, kami telah membuat fungsi add()yang mengembalikan jumlah numA dan numB.

Karena ClassBmerupakan kelas teman, kita dapat membuat objek ClassAdi dalamnya ClassB.

Artikel yang menarik...