Dalam C++, fungsi rakan ialah fungsi khas yang boleh mengakses ahli persendirian kelas lain. Pengisytiharan fungsi rakan menggunakan kata kunci rakan, dan anda perlu memberi perhatian kepada kebenaran akses semasa mentakrifkannya. Fungsi rakan digunakan secara meluas dalam STL untuk membenarkan kelas kontena berinteraksi dengan algoritma, seperti std::swap(), std::ostream_iterator dan std::vector.
C++ Penjelasan terperinci tentang fungsi rakan
Apakah fungsi rakan?
Fungsi rakan ialah fungsi khas yang boleh mengakses ahli persendirian kelas lain. Ia membenarkan perkongsian data dan manipulasi merentas kelas.
Pengisytiharan fungsi rakan
Fungsi rakan boleh diisytiharkan menggunakan kata kunci friend
关键字声明:
class MyClass { private: int x; public: friend void printX(MyClass& obj); };
友元函数定义
友元函数可以与通常的函数一样定义,但需要注意访问权限:
void printX(MyClass& obj) { cout << obj.x << endl; }
实战案例:STL 中的友元函数
标准模板库 (STL) 广泛使用了友元函数,以允许容器类与算法相交互:
1. std::swap()
用于交换两个容器元素的 std::swap()
函数是友元函数,因为它需要访问容器的私有成员:
template<typename T> void swap(T& a, T& b) { // ... 交换 a 和 b 的私有成员 ... }
2. std::ostream_iterator
用于输出容器元素的 std::ostream_iterator
类使用了友元函数来访问容器的 begin()
和 end()
方法:
template<class T> class ostream_iterator { friend ostream& operator<<(ostream& os, const ostream_iterator<T>& it); };
3. std::vector
std::vector
template<typename T> class vector { friend class std::allocator<T>; };
Definisi fungsi rakan
Fungsi rakan boleh ditakrifkan seperti fungsi biasa, tetapi Perlu diberi perhatian untuk mengakses kebenaran:rrreee
🎜Contoh praktikal: Fungsi rakan dalam STL 🎜🎜🎜Pustaka Templat Standard (STL) menggunakan fungsi rakan secara meluas untuk membolehkan kelas kontena berinteraksi dengan algoritma: 🎜🎜🎜1. )🎜🎜🎜Fungsistd::swap()
yang digunakan untuk menukar dua elemen kontena ialah fungsi rakan kerana ia perlu mengakses ahli peribadi bekas: 🎜rrreee🎜🎜2 std :: ostream_iterator🎜🎜🎜Kelas std::ostream_iterator
yang digunakan untuk mengeluarkan elemen kontena menggunakan fungsi rakan untuk mengakses begin()
dan end()
bekas. Kaedah: 🎜rrreee🎜🎜3. std::vector🎜🎜🎜std::vector
kelas menggunakan fungsi rakan untuk mengakses pelaksanaan dalamannya: 🎜rrreee🎜🎜Kesimpulan🎜🎜🎜Kawan dalam Metafunctions C++ yang membenarkan perkongsian data dan melaksanakan operasi merentas kelas. Fungsi rakan digunakan secara meluas dalam STL untuk membolehkan interaksi lancar antara bekas dan algoritma. 🎜Atas ialah kandungan terperinci Penjelasan terperinci tentang fungsi rakan C++: Aplikasi fungsi rakan dalam STL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!