Mengakses Fungsi Rakan Ditakrifkan dalam Kelas
Dalam C , fungsi rakan diberikan akses kepada ahli peribadi dan dilindungi kelas. Kod yang disediakan mentakrifkan kelas A dengan tiga fungsi rakan: seronok, seronok2 dan seronok3. Walaupun fun dan fun3 boleh diakses tanpa masalah, terdapat masalah untuk mengakses fun2.
Untuk mengakses fun2, anda mempunyai dua pilihan:
1. Pengisytiharan Global Fungsi Rakan:
Anda boleh mengisytiharkan fungsi rakan dalam skop global selepas definisi kelas. Ini memberitahu pengkompil bahawa fungsi wujud secara luaran dan merupakan rakan kelas. Contohnya:
<code class="cpp">#include <iostream> class A { public: friend void fun(A a); friend void fun2(); friend void fun3(); }; void fun(A a) { std::cout << "I'm here" << std::endl; } void fun2() { std::cout << "I'm here2" << std::endl; } void fun3() { std::cout << "I'm here3" << std::endl; } int main() { fun(A()); // Works fun2(); // Now works fun3(); // Works }</code>
2. Invokasi Fungsi Ahli Eksplisit:
Anda boleh menggunakan fungsi rakan secara eksplisit sebagai fungsi ahli kelas. Walau bagaimanapun, ini memerlukan fungsi rakan ditandakan sebagai statik (jika mereka tidak mempunyai parameter ini). Contohnya:
<code class="cpp">#include <iostream> class A { public: friend static void fun(A a); friend static void fun2(); friend static void fun3(); }; static void fun(A a) { std::cout << "I'm here" << std::endl; } static void fun2() { std::cout << "I'm here2" << std::endl; } static void fun3() { std::cout << "I'm here3" << std::endl; } int main() { fun(A()); // Works A::fun2(); // Works fun3(); // Works }</code>
Ingat, pengisytiharan fungsi rakan dalam skop global adalah perlu, tidak kira sama ada ia diakses secara eksplisit atau sebagai fungsi ahli statik.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Fungsi Rakan Ditakrifkan dalam Kelas C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!