Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greife ich auf Friend-Funktionen zu, die in einer Klasse in C definiert sind?

Wie greife ich auf Friend-Funktionen zu, die in einer Klasse in C definiert sind?

Barbara Streisand
Barbara StreisandOriginal
2024-11-06 22:22:02348Durchsuche

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

Zugriff auf in der Klasse definierte Friend-Funktionen

In C werden Friend-Funktionen innerhalb von Klassen deklariert, können aber auf private und geschützte Mitglieder der Klasse zugreifen. Betrachten Sie den folgenden Codeausschnitt:

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

Der Zugriff auf die Funktion fun(A) funktioniert einwandfrei, da sie über einen Parameter vom Typ A verfügt, der es der argumentabhängigen Suche ermöglicht, sie zu finden. Es gibt jedoch ein Problem beim Zugriff auf die globalen Funktionen fun2() und fun3().

Die Deklaration von fun2 innerhalb der Klasse macht es zu einer Friend-Funktion, deklariert sie jedoch nicht im globalen Bereich. Folglich gilt beim Zugriff auf fun2() außerhalb der Klasse:

  • fun2(); führt zu einem Fehler.
  • A::fun2(); führt ebenfalls zu einem Fehler.

Um dieses Problem zu beheben, besteht der richtige Ansatz darin, alle Freundfunktionen außerhalb der Klasse zu definieren und sie zu expliziten Freunden der Klasse zu machen:

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

Definieren Friend-Funktionen ermöglichen auf diese Weise den Zugriff sowohl innerhalb als auch außerhalb der Klasse.

Das obige ist der detaillierte Inhalt vonWie greife ich auf Friend-Funktionen zu, die in einer Klasse in C definiert sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn