Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa saya tidak boleh mengakses fungsi rakan yang diisytiharkan dalam kelas?

Mengapa saya tidak boleh mengakses fungsi rakan yang diisytiharkan dalam kelas?

DDD
DDDasal
2024-11-07 07:13:02123semak imbas

Why can't I access a friend function declared within a class?

Mengakses Fungsi Rakan Ditakrifkan dalam Kelas

Dalam coretan kod yang disediakan, terdapat tiga fungsi rakan yang diisytiharkan sebagai rakan kelas A: seronok, seronok2, dan seronok3. Walaupun fun dan fun3 boleh diakses tanpa sebarang masalah, mengakses fun2 menimbulkan ralat kompilasi. Ini kerana fun2 diisytiharkan dalam pengisytiharan kelas, yang menjadikannya entiti tempatan hanya diketahui dalam skop tersebut.

Untuk menangani had ini, terdapat dua pendekatan utama:

Mentakrifkan Pengisytiharan Fungsi Global:

Dalam pendekatan ini, anda boleh mentakrifkan fungsi rakan fun2 di luar pengisytiharan kelas, seperti berikut:

<code class="cpp">// In the global scope
void fun2();</code>

Ini menjadikan pengisytiharan fungsi kelihatan kepada keseluruhan program dan membolehkan anda mengaksesnya menggunakan ruang nama global.

Menggunakan Pengisytiharan Kelas Rakan:

Sebagai alternatif, anda boleh menggunakan pengisytiharan kelas rakan untuk memberikan akses kepada fungsi ahli kelas tertentu. Sebagai contoh, anda boleh mencipta Rakan kelas yang diisytiharkan sebagai rakan kelas A:

<code class="cpp">class Friend {
    friend void fun2();
};</code>

Ini membenarkan sebarang fungsi yang ditakrifkan dalam kelas Rakan untuk mengakses ahli peribadi dan dilindungi kelas A. Walau bagaimanapun, pendekatan ini tidak sefleksibel seperti mentakrifkan fungsi secara global, kerana ia mengehadkan akses kepada fungsi tersebut dalam skop kelas Rakan.

Dengan mengikuti pendekatan ini, anda boleh mengakses fungsi rakan yang ditakrifkan dalam kelas dengan berkesan. , memastikan mereka mempunyai keistimewaan yang diperlukan untuk berinteraksi dengan ahli kelas.

Atas ialah kandungan terperinci Mengapa saya tidak boleh mengakses fungsi rakan yang diisytiharkan dalam kelas?. 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