Fungsi dan Kelas Rakan C ++ (Dengan Contoh)

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

Penyembunyian data adalah konsep asas pengaturcaraan berorientasikan objek. Ini menyekat akses ahli persendirian dari luar kelas.

Begitu juga, anggota yang dilindungi hanya dapat diakses oleh kelas yang berasal 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, terdapat ciri dalam fungsi C ++ yang disebut rakan yang melanggar peraturan ini dan membolehkan kita mengakses fungsi anggota dari luar kelas.

Begitu juga, ada kelas rakan , yang akan kita pelajari nanti dalam tutorial ini.

rakan Fungsi dalam C ++

A fungsi rakan boleh mengakses swasta dan dilindungi data kelas. Kami menyatakan fungsi rakan menggunakan friendkata kunci di dalam badan kelas.

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

Contoh 1: Fungsi kerja rakan

 // 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; )

Pengeluaran

 Jarak: 5

Di sini, addFive()adalah fungsi rakan yang dapat mengakses ahli data peribadi dan awam .

Walaupun contoh ini memberi kita idea tentang konsep fungsi rakan, itu tidak menunjukkan penggunaan yang bermakna.

Penggunaan yang lebih bermakna akan digunakan pada objek dari dua kelas yang berbeza. Ketika itulah fungsi rakan dapat sangat membantu.

Contoh 2: Tambah Ahli Dua Kelas Berbeza

 // 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; )

Pengeluaran

 Jumlah: 13

Dalam program ini, ClassAdan ClassBtelah dinyatakan add()sebagai fungsi rakan. Oleh itu, fungsi ini dapat mengakses data peribadi kedua-dua kelas.

Satu perkara yang perlu diperhatikan di sini adalah fungsi rakan di dalamnya ClassAadalah menggunakan ClassB. Walau bagaimanapun, kita belum menentukan ClassBpada masa ini.

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

Agar ini berjaya, kita memerlukan pernyataan ke hadapan ClassBdalam program kita.

 // forward declaration class ClassB;

rakan kelas di C ++

Kami juga boleh menggunakan Kelas rakan dalam C ++ menggunakan friendkata kunci. Sebagai contoh,

 class ClassB; class ClassA ( // ClassB is a friend class of ClassA friend class ClassB;… ) class ClassB (… )

Apabila kelas diisytiharkan sebagai kelas rakan, semua fungsi anggota kelas rakan menjadi fungsi rakan.

Oleh kerana classBmerupakan rakan kelas, kita dapat mengakses semua ahli classAdari dalam classB.

Namun, kami tidak dapat mengakses anggota ClassBdari dalam classA. Ini kerana hubungan rakan dalam C ++ hanya diberikan, tidak diambil.

Contoh 3: Kelas rakan 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; )

Pengeluaran

 Jumlah: 13

Di sini, ClassBadalah kelas rakan ClassA. Jadi, ClassBmempunyai akses kepada anggota classA.

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

Oleh kerana ClassBmerupakan kelas rakan, kita dapat membuat objek dari ClassAdalam ClassB.

Artikel menarik...