Maison >développement back-end >C++ >Comment accéder aux fonctions Friend définies dans une classe en C ?

Comment accéder aux fonctions Friend définies dans une classe en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 22:22:02427parcourir

How to Access Friend Functions Defined in a Class in C  ?

Accéder aux fonctions d'ami définies dans la classe

En C, les fonctions d'ami sont déclarées au sein des classes mais peuvent accéder aux membres privés et protégés de la classe. Considérez l'extrait de code suivant :

<code class="cpp">class A {
    friend void fun(A a);
    friend void fun2();
    friend void fun3();
};

void fun3() {
    std::cout << "I'm here3" << std::endl;
}</code>

L'accès à la fonction fun(A) fonctionne correctement car elle possède un paramètre de type A, permettant à la recherche dépendante de l'argument de la localiser. Cependant, il y a un problème pour accéder aux fonctions globales fun2() et fun3().

La déclaration de fun2 au sein de la classe en fait une fonction amie mais ne la déclare pas dans la portée globale. Par conséquent, lors de l'accès à fun2() en dehors de la classe :

  • fun2(); entraîne une erreur.
  • A::fun2(); entraîne également une erreur.

Pour résoudre ce problème, l'approche correcte consiste à définir toutes les fonctions d'ami en dehors de la classe et à en faire des amis explicites de la classe :

<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>

Définir Les fonctions d'ami de cette façon permettent d'y accéder à la fois à l'intérieur et à l'extérieur de la classe.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn