Heim >Backend-Entwicklung >C++ >Friend-Funktion vs. Member-Funktion für Operator

Friend-Funktion vs. Member-Funktion für Operator

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-14 16:07:16691Durchsuche

Friend Function vs. Member Function for Operator

Operator<< in C: Friend-Funktion vs. Member-Funktion

In C ist der Operator<< kann entweder als Friend-Funktion oder als Member-Funktion definiert werden. In diesem Artikel werden die Gründe für die Wahl des einen gegenüber dem anderen in bestimmten Szenarien untersucht.

Friend-Function-Ansatz für Operator<<

Bei der Definition von Operator<< Als Friend-Funktion umfasst die Syntax normalerweise Folgendes:

friend bool operator<<(obj const&amp; lhs, obj const&amp; rhs);

Dieser Ansatz wird empfohlen, wenn der Beziehungsvergleich die Untersuchung der privaten Mitglieder der Klasse umfasst. Da Friend-Funktionen Zugriff auf die privaten Mitglieder einer Klasse haben, können sie den Vergleich direkt durchführen.

Member-Function-Ansatz für Operator<<

Bei diesem Ansatz der Operator<< ist als Mitgliedsfunktion der Klasse definiert:

ostream&amp; operator<<(obj const&amp; rhs);

Dieser Ansatz ist geeignet, wenn der Vergleich öffentlich zugängliche Daten oder einfache Operationen umfasst. Es gibt jedoch eine wesentliche Einschränkung: Wenn der Vergleich Zugriff auf private Mitglieder erfordert, kann der Member-Funktions-Ansatz nicht verwendet werden.

Vergleich von Ansätzen

Streaming Operationen:
Beim Definieren des Operators<< Für Streaming-Vorgänge können sowohl Friend-Funktionen als auch Member-Funktionen verwendet werden. Allerdings müssen Friend-Funktionen verwendet werden, wenn der Streaming-Vorgang das Stream-Objekt ändern muss (z. B. Zeilenumbrüche hinzufügen).

Gleichheits- und Beziehungsoperatoren:
Für Operatoren wie = =, !=, <, > usw. werden vorzugsweise als Mitgliedsfunktionen definiert. Dieser Ansatz ermöglicht einen einfachen Vergleich privater Mitglieder innerhalb der Klasse. Darüber hinaus vereinfacht es den Code, da keine zusätzlichen Friend-Funktionen erforderlich sind.

Beispiel

Betrachten Sie das folgende Beispiel einer Paragraph-Klasse mit einer to_str()-Methode:

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

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

Freundefunktion Ansatz:

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

Member-Funktion-Ansatz:

ostream &amp; operator<<(ostream &amp;os) {
    return os << paragraph;
}

In diesem Fall wird der Friend-Funktion-Ansatz bevorzugt, da er den Zugriff auf das Private ermöglicht Mitglied m_para für Streaming-Vorgänge.

Das obige ist der detaillierte Inhalt vonFriend-Funktion vs. Member-Funktion für Operator. 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