Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greife ich auf in einer C-Klasse definierte Friend-Funktionen zu?

Wie greife ich auf in einer C-Klasse definierte Friend-Funktionen zu?

Susan Sarandon
Susan SarandonOriginal
2024-11-10 08:39:02503Durchsuche

How to Access Friend Functions Defined in a C   Class?

Zugriff auf in einer Klasse definierte Friend-Funktionen

In C wird Friend-Funktionen Zugriff auf private und geschützte Mitglieder einer Klasse gewährt. Der bereitgestellte Code definiert eine Klasse A mit drei Freundfunktionen: fun, fun2 und fun3. Während auf fun und fun3 problemlos zugegriffen werden kann, gibt es beim Zugriff auf fun2 ein Problem.

Um auf fun2 zuzugreifen, Sie haben zwei Möglichkeiten:

1. Globale Deklaration von Friend-Funktionen:

Sie können Friend-Funktionen im globalen Bereich nach der Klassendefinition deklarieren. Dadurch wird der Compiler darüber informiert, dass eine Funktion extern existiert und ein Freund der Klasse ist. Zum Beispiel:

<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. Explizite Member-Funktionsaufruf:

Sie können Friend-Funktionen explizit als Member-Funktionen der Klasse aufrufen. Dies erfordert jedoch, dass die Friend-Funktionen als statisch markiert werden (sofern sie keinen this-Parameter haben). Zum Beispiel:

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

Denken Sie daran, dass die Deklaration der Friend-Funktion im globalen Bereich notwendig ist, unabhängig davon, ob explizit oder als statische Mitgliedsfunktion darauf zugegriffen wird.

Das obige ist der detaillierte Inhalt vonWie greife ich auf in einer C-Klasse definierte Friend-Funktionen zu?. 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