Rumah >pembangunan bahagian belakang >C++ >Apakah jenis ahli yang boleh mengakses fungsi rakan C++?

Apakah jenis ahli yang boleh mengakses fungsi rakan C++?

王林
王林asal
2024-04-15 17:09:01916semak imbas

Dalam C++, fungsi rakan boleh mengakses semua ahli kelas awam, dilindungi dan persendirian, tetapi akses kepada ahli persendirian adalah terhad dan hanya boleh dilakukan apabila fungsi ahli kelas dipanggil.

C++ 友元函数能访问哪些类型成员?

Apakah jenis ahli yang boleh mengakses fungsi rakan C++?

Apakah fungsi kawan?

Fungsi rakan ialah fungsi khas dalam C++ yang boleh mengakses ahli kelas peribadi dan dilindungi. Fungsi rakan mesti diisytiharkan di luar definisi kelas.

Taip ahli yang fungsi rakan boleh akses

Fungsi rakan boleh mengakses ahli jenis berikut:

  • ahli awam: Fungsi rakan boleh mengakses semua ahli awam kelas.
  • ahli yang dilindungi: Fungsi rakan boleh mengakses semua ahli kelas yang dilindungi.
  • ahli persendirian: Fungsi rakan boleh mengakses ahli persendirian kelas, tetapi hanya apabila fungsi rakan dipanggil oleh fungsi ahli kelas.

Kes praktikal

Pertimbangkan kod berikut:

class MyClass {
private:
    int m_num;

public:
    MyClass(int num) : m_num(num) {}

    friend void print_num(MyClass& obj) {
        std::cout << obj.m_num << std::endl;
    }
};

int main() {
    MyClass obj(42);
    print_num(obj);  // 友元函数访问私有成员
    return 0;
}

Hasil keluaran:

42

Dalam contoh ini, print_num() ialah fungsi rakan MyClass. Ia boleh mengakses m_num ahli persendirian walaupun ia bukan fungsi ahli MyClass.

Akses Terhad

Perlu diingatkan bahawa akses fungsi rakan kepada ahli persendirian adalah terhad. Fungsi rakan hanya boleh mengakses ahli persendirian apabila fungsi ahli kelas dipanggil. Dengan kata lain, fungsi rakan tidak boleh mengakses ahli persendirian secara langsung dari luar.

Atas ialah kandungan terperinci Apakah jenis ahli yang boleh mengakses fungsi rakan C++?. 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