Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greifen Sie auf eine Friend-Funktion zu, ohne dass in einer Klasse Argumente definiert sind?

Wie greifen Sie auf eine Friend-Funktion zu, ohne dass in einer Klasse Argumente definiert sind?

Susan Sarandon
Susan SarandonOriginal
2024-11-05 15:41:02953Durchsuche

How do you access a friend function without arguments defined inside a class?

Zugriff auf in der Klasse definierte Friend-Funktionen

In C ist es möglich, Friend-Funktionen innerhalb einer Klasse zu definieren. Friend-Funktionen sind externe Funktionen, die Zugriff auf die privaten und geschützten Mitglieder der Klasse haben. Typischerweise werden Friend-Funktionen verwendet, um externen Modulen oder Funktionen die Interaktion mit Klassenmitgliedern zu ermöglichen.

Problem:

Bedenken Sie den folgenden Code:

<code class="cpp">class A {
public:
    friend void fun(A a);  // Friend function that takes an argument of type A
    friend void fun2();  // Friend function without arguments
    friend void fun3();  // Friend function declaration
};

void fun(A a) { std::cout << "Im here" << std::endl; }
void fun3() { std::cout << "Im here3" << std::endl; }

int main() {
    fun(A()); // Works OK
    // fun2(); // Error: 'fun2' was not declared in this scope
    // A::fun2(); // Error: 'fun2' is not a member of 'A'
    fun3(); // Works OK
}</code>

Frage:

Wie kann man auf die Freundesfunktion fun2() zugreifen?

Antwort:

Um auf die zuzugreifen Wenn Sie die Friend-Funktion fun2() verwenden, müssen Sie sie explizit außerhalb der Klasse definieren. Derzeit fehlt die Definition von fun2(), weshalb der Compiler sie nicht im globalen Bereich finden kann.

Um das Problem zu beheben, definieren Sie fun2() als globale Funktion außerhalb der Klasse:

<code class="cpp">void fun2() { std::cout << "Im here2" << std::endl; }</code>

Mit dieser Änderung sollten Sie auf fun2() zugreifen können, ohne dass Fehler auftreten:

<code class="cpp">fun2(); // Works OK</code>

Darüber hinaus wird empfohlen, dem typischen Muster zu folgen, Friend-Funktionen als separate Einheiten zu definieren außerhalb der Klasse für Klarheit und Wartbarkeit:

<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(); // Leave it as a declaration

int main() {
    fun(A());
    fun2();
    fun3();
}</code>

Das obige ist der detaillierte Inhalt vonWie greifen Sie auf eine Friend-Funktion zu, ohne dass in einer Klasse Argumente 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