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
Libérer: 2024-11-10 08:39:02
original
568 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal