Rumah >pembangunan bahagian belakang >C++ >Penjelasan terperinci tentang fungsi rakan C++: Bagaimanakah fungsi rakan digunakan dalam unit kompilasi yang berbeza?
Fungsi rakan membenarkan fungsi mengakses ahli persendirian kelas lain. Apabila fungsi rakan dan kelas yang diaksesnya tidak berada dalam unit kompilasi yang sama, terdapat dua senario: fungsi rakan diisytiharkan dalam fail pengepala: pengisytiharan fungsi rakan berada dalam fail pengepala kelas, dan definisi daripada kelas berada dalam fail sumber yang berbeza, fungsi rakan boleh mengakses ahli persendirian. Fungsi rakan diisytiharkan dalam fail sumber: Pengisytiharan dan definisi fungsi rakan terletak dalam fail sumber berasingan Fungsi rakan perlu diisytiharkan dalam fail pengepala sebelum ia boleh digunakan dalam unit kompilasi lain.
C++ Penjelasan terperinci tentang fungsi rakan: Penggunaan fungsi rakan dalam unit kompilasi berbeza
Fungsi rakan ialah jenis fungsi khas dalam C++ yang boleh mengakses ahli persendirian kelas lain. Ini membolehkan fungsi rakan melakukan operasi yang tidak boleh dilakukan oleh kelas lain, seperti mengubah suai data peribadi atau memanggil kaedah peribadi.
Fungsi rakan dalam unit kompilasi yang berbeza
Menggunakan fungsi rakan menjadi lebih rumit apabila anda menyusun kod anda ke dalam unit kompilasi yang berbeza (seperti fail sumber atau fail pengepala). Untuk fungsi rakan boleh mengakses ahli persendirian kelas lain, kelas mesti diisytiharkan sebelum fungsi rakan diisytiharkan.
Jika fungsi rakan dan kelas yang diaksesnya tidak berada dalam unit kompilasi yang sama, terdapat dua senario berbeza:
Senario 1: Fungsi rakan diisytiharkan dalam fail pengepala
Dalam kes ini, rakan The pengisytiharan fungsi adalah dalam fail pengepala kelas, manakala definisi kelas berada dalam fail sumber yang berbeza. Ini adalah kes yang paling biasa:
// header.h class MyClass { // ... friend void myFriendFunction(); }; // source.cpp #include "header.h" void myFriendFunction() { MyClass obj; // 可以访问 MyClass 的 private 成员 obj.privateMember = 10; }
Senario 2: Fungsi rakan diisytiharkan dalam fail sumber
Dalam kes yang kurang biasa ini, kedua-dua pengisytiharan dan takrifan fungsi rakan adalah dalam fail sumber yang berasingan:
// class.cpp class MyClass { // ... friend void myFriendFunction(); }; // friend.cpp #include "class.h" void myFriendFunction() { MyClass obj; // 可以访问 MyClass 的 private 成员 obj.privateMember = 10; }
Untuk senario 2 , anda juga perlu mengisytiharkan fungsi rakan dalam fail pengepala untuk digunakan dalam unit kompilasi lain:
// header.h class MyClass; // 前向声明 extern void myFriendFunction();
Kes praktikal
Pertimbangkan contoh berikut menggunakan fungsi rakan untuk mengendalikan ahli persendirian:
#include <iostream> class MyClass { int privateMember; public: MyClass(int val) : privateMember(val) {} friend void printPrivate(MyClass& obj); }; void printPrivate(MyClass& obj) { std::cout << "Private member: " << obj.privateMember << std::endl; } int main() { MyClass obj(10); printPrivate(obj); // 可以访问 privateMember return 0; }
Dalam contoh ini , printPrivate()
友元函数可以访问 MyClass
的私有成员 privateMember
, dan mencetaknya ke konsol.
Nota
Atas ialah kandungan terperinci Penjelasan terperinci tentang fungsi rakan C++: Bagaimanakah fungsi rakan digunakan dalam unit kompilasi yang berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!