Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang fungsi rakan C++: Aplikasi fungsi rakan dalam STL?

Penjelasan terperinci tentang fungsi rakan C++: Aplikasi fungsi rakan dalam STL?

王林
王林asal
2024-04-30 08:42:01524semak imbas

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++ 友元函数详解:友元函数在STL中的应用?

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 rakan: 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. )🎜🎜🎜Fungsi std::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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn