Maison >développement back-end >C++ >Comment accéder aux fonctions Friend définies dans une classe C ?
Accès aux fonctions d'ami définies dans une classe
En C, les fonctions d'ami ont accès aux membres privés et protégés d'une classe. Le code fourni définit une classe A avec trois fonctions amies : fun, fun2 et fun3. Bien que fun et fun3 soient accessibles sans problème, il y a un problème pour accéder à fun2.
Pour accéder à fun2, vous avez deux options :
1. Déclaration globale des fonctions amies :
Vous pouvez déclarer les fonctions amies dans la portée globale après la définition de la classe. Cela informe le compilateur qu'une fonction existe en externe et qu'elle est amie de la classe. Par exemple :
<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. Invocation explicite de fonctions membres :
Vous pouvez appeler explicitement des fonctions amies en tant que fonctions membres de la classe. Cependant, cela nécessite que les fonctions d'ami soient marquées comme statiques (si elles n'ont pas de paramètre this). Par exemple :
<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>
N'oubliez pas que la déclaration de la fonction ami dans la portée globale est nécessaire, qu'elle soit accessible explicitement ou en tant que fonction membre statique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!