"Operator<<: Freund- oder Mitgliedsfunktion? Berücksichtigung der Art der Operation"
Die Auswahl zwischen implementierendem Operator<< Als Freund- oder Mitgliedsfunktion hängt es von der Art der ausgeführten Operation ab.
Für Vergleichsoperatoren (==, != usw.) ist es ratsam, sie als Mitgliedsfunktionen innerhalb der Klasse zu behandeln. Da die Klasse von Natur aus ein Freund ihrer selbst ist, kann sie mühelos auf private Mitglieder ihrer Instanzen zugreifen und diese vergleichen. Darüber hinaus kann die Aktivierung der automatischen Konvertierung für einen Operanden über eigenständige Funktionen zu unbeabsichtigten Folgen führen. daher die Präferenz für Mitgliedsfunktionen.
Umgekehrt erfordern Stream-Operatoren (<<, >>) externe Funktionen, da sie Zugriff auf ein Stream-Objekt außerhalb der Kontrolle der Klasse erfordern. Diese Funktionen können entweder Freunde der Klasse sein oder eine öffentliche Methode verwenden, die das Streaming verwaltet.
Es ist üblich, dass Stream-Operatoren Verweise auf Stream-Objekte zurückgeben, was eine nahtlose Verkettung von Vorgängen ermöglicht. Hier ist ein Beispiel, das diesen Ansatz demonstriert:
#include <iostream> class Paragraph { public: Paragraph(std::string const& init) : m_para(init) {} std::string const& to_str() const { return m_para; } bool operator==(Paragraph const& rhs) const { return m_para == rhs.m_para; } bool operator!=(Paragraph const& rhs) const { return !(this->operator==(rhs)); } bool operator<(Paragraph const& rhs) const { return m_para < rhs.m_para; } private: friend std::ostream & operator<<(std::ostream &os, const Paragraph& p); std::string m_para; }; std::ostream & operator<<(std::ostream &os, const Paragraph& p) { return os << p.to_str(); } int main() { Paragraph p("Plop"); Paragraph q(p); std::cout << p << std::endl << (p == q) << std::endl; }
Indem Sie die Art jedes Vorgangs verstehen und sich an geeignete Implementierungsoptionen halten, können Sie den Operator<< um Objekte nach Wunsch zu manipulieren.
Das obige ist der detaillierte Inhalt vonSollte „Betreiber' sein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!