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
Freigeben: 2025-01-03 04:14:39
Original
750 Leute haben es durchsucht

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();
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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; }
};
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage