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

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-10 08:39:02534parcourir

How to Access Friend Functions Defined in a C   Class?

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!

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