Heim > Backend-Entwicklung > C++ > Freund- oder Mitgliedsfunktion: Wann sollte `Operator

Freund- oder Mitgliedsfunktion: Wann sollte `Operator

DDD
Freigeben: 2024-12-08 04:45:11
Original
1056 Leute haben es durchsucht

Friend or Member Function: When Should `operator

Wann ist der Operator zu implementieren?<< als Freund- oder Mitgliedsfunktion

Einführung:

Operatorüberladung ermöglicht es uns, Operatoren wie << um mit benutzerdefinierten Klassen zu arbeiten. Es stellt sich die Frage: Sollte der Operator<< als Friend-Funktion oder Member-Funktion innerhalb der Klasse implementiert werden?

Member-Funktion vs. Friend-Funktion

Member-Funktion

ostream& operator<<(ostream &os, const obj& rhs);
Nach dem Login kopieren

Vorteile:

  • Direkter Zugriff auf die privaten Mitglieder der Klasse
  • Kapselung der Streaming-Logik innerhalb der Klasse

Friend-Funktion

friend ostream &operator<<(ostream &os, const obj& rhs);
Nach dem Login kopieren

Vorteile:

  • Kann von mehreren Klassen verwendet werden
  • Kann die automatische Typkonvertierung für beide Operanden erleichtern

Begründung für Entscheidung

Gleichheitsoperatoren

Für Gleichheitsoperatoren (z. B. ==, !=) werden Mitgliedsfunktionen bevorzugt, weil:

  • Sie haben direkten Zugriff auf die Klassen private Daten.
  • Sie erzwingen die interne Darstellung der Klasse auf Gleichheit Vergleiche.

Stream-Operatoren

Für Stream-Operatoren (<<, >>) sind Friend-Funktionen notwendig:

  • Sie funktionieren auf Objekten verschiedener Typen (z. B. ostream und die benutzerdefinierte Klasse).
  • Sie geben einen Verweis auf das Stream-Objekt für verkettet zurück Operationen.

Beispiel:

Betrachten Sie eine Paragraph-Klasse mit einem privaten m_para-String-Mitglied. Wir möchten den Operator<< um den Text des Absatzes zu drucken:

class Paragraph {
public:
    Paragraph(const string& init) : m_para(init) {}
    const string& to_str() const { return m_para; }
    bool operator==(const Paragraph& rhs) const { return m_para == rhs.m_para; }
    friend ostream &operator<<(ostream &os, const Paragraph& p);

private:
    string m_para;
};

ostream &operator<<(ostream &os, const Paragraph& p) {
    return os << p.to_str();
}
Nach dem Login kopieren

In diesem Beispiel ist der Operator<< wird als Friend-Funktion implementiert, da sie mit verschiedenen Typen arbeitet und eine Stream-Referenz zurückgibt. Die to_str()-Methode wird verwendet, um auf das private m_para-Mitglied zuzugreifen und es zur Ausgabe in einen String umzuwandeln.

Das obige ist der detaillierte Inhalt vonFreund- oder Mitgliedsfunktion: Wann sollte `Operator. 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