Accès aux fonctions d'ami définies dans une classe
Lorsque vous travaillez avec des fonctions d'ami, il est essentiel de comprendre comment elles sont définies et accessibles. Comme les fonctions ami ne sont pas membres d'une classe, y accéder en dehors de la classe peut nécessiter des considérations particulières.
Dans l'extrait de code fourni :
<code class="cpp">class A { public: friend void fun(A a){std::cout << "Im here" << std::endl;} friend void fun2(){ std::cout << "Im here2" << std::endl; } friend void fun3(); };</code>
Les fonctions ami fun() et fun3( ) sont définis dans la classe mais ne sont pas déclarés dans la portée globale. Alors que fun() est accessible directement à l'aide de la recherche dépendante de l'argument (ADL) en raison de l'argument de type A, fun2() n'est pas accessible sans déclaration dans la portée globale.
Pour accéder correctement à fun2() , elle doit être déclarée globalement en plus d'être définie comme une fonction amie au sein de la classe :
<code class="cpp">class A { public: friend void fun(A a){std::cout << "Im here" << std::endl;} friend void fun2(); friend void fun3(); }; void fun2(){ std::cout << "Im here2" << std::endl; }</code>
Dans cette version modifiée, fun2() est accessible en dehors de la classe comme une fonction ordinaire.
Cependant, il est recommandé de définir les fonctions ami de la manière habituelle, en dehors de la classe mais déclarées comme amis :
<code class="cpp">class A { 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();</code>
Cette approche garantit que toutes les fonctions ami sont définies et déclarées correctement, les rendant accessibles et utilisable comme prévu.
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!