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?
ostream& operator<<(ostream &os, const obj& rhs);
Vorteile:
friend ostream &operator<<(ostream &os, const obj& rhs);
Vorteile:
Für Gleichheitsoperatoren (z. B. ==, !=) werden Mitgliedsfunktionen bevorzugt, weil:
Für Stream-Operatoren (<<, >>) sind Friend-Funktionen notwendig:
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(); }
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!