Heim >Backend-Entwicklung >C++ >Friend-Funktion vs. Member-Funktion für Operatorüberladung: Wann wird eine Friend-Funktion für ` bevorzugt?

Friend-Funktion vs. Member-Funktion für Operatorüberladung: Wann wird eine Friend-Funktion für ` bevorzugt?

DDD
DDDOriginal
2025-01-03 04:14:39765Durchsuche

Friend Function vs. Member Function for Operator Overloading: When is a Friend Function Preferred for `

Operatorüberladung: Friend-Funktion vs. Member-Funktion für „<<“

In C können überladene Operatoren entweder als Friend-Funktionen oder Member-Funktionen implementiert werden. Wenn es um den Stream-Einfügungsoperator „<<“ geht, bestimmen bestimmte Überlegungen die Wahl zwischen diesen Ansätzen.

Verwenden einer Friend-Funktion

friend ostream & operator<<(ostream & os, const Paragraph& p) {
    return os << p.to_str();
}

Dieser Ansatz wird häufig für Streams verwendet Operatoren, weil:

  • Es ermöglicht den Zugriff auf das Stream-Objekt (OS), das für die Ausführung des Streams erforderlich ist Einfügung.
  • Es folgt der Konvention, dass Stream-Operatoren eine Stream-Referenz zu Verkettungszwecken zurückgeben.

Verwenden einer Member-Funktion

ostream & operator<<(Paragraph const& rhs);

Obwohl es verlockend ist, darüber nachzudenken Da Memberfunktionen für alle Klassenmethoden verwendet werden sollten, wird dieser Ansatz für die Methode „<<“ nicht empfohlen. Operator aus mehreren Gründen:

  • Sie können nicht über eine Mitgliedsfunktion auf das Stream-Objekt (OS) zugreifen.
  • Sie müssten die Methode „to_str“ in der Mitgliedsfunktion manuell aufrufen. Das ist redundant und fehleranfällig.
  • Es ist nicht üblich, dass Stream-Betreiber Mitglied sind Funktionen.

Beispiel

Betrachten Sie die folgende Klasse:

class Paragraph {
    std::string m_para;

public:
    Paragraph(std::string const& init) : m_para(init) {}

    std::string const& to_str() const { return m_para; }
};

Begründung

In diesem Fall wird eine Freundfunktion für die „ <<" Der Operator ist die bevorzugte Wahl, weil:

  • Er bietet Zugriff auf das Stream-Objekt (OS) für das Streaming.
  • Er folgt der Konvention, dass Stream-Operatoren eine Stream-Referenz zurückgeben.
  • Es reduziert Codeduplizierung und potenzielle Fehler im Vergleich zur Verwendung einer Mitgliedsfunktion.

Das obige ist der detaillierte Inhalt vonFriend-Funktion vs. Member-Funktion für Operatorüberladung: Wann wird eine Friend-Funktion für ` bevorzugt?. 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