Heim >Backend-Entwicklung >C++ >Überlastung von Mitglieds- und Nichtmitglieds-Betreibern: Wann werden Friend-Funktionen bevorzugt?
Operatorüberladung: Mitgliedsfunktion vs. Nichtmitgliedsfunktion
Bei der Operatorüberladung führt die Wahl zwischen Mitglieds- und Nichtmitgliedsfunktionen zu Verwirrung . Obwohl Mitgliedsfunktionen asymmetrisch und Nicht-Mitgliedsfunktionen symmetrisch sind, warum werden Freunde in bestimmten Szenarien bevorzugt?
Mitgliedsfunktionen können nur einen expliziten Parameter akzeptieren, da dieser Zeiger automatisch übergeben wird, um das aufrufende Objekt darzustellen. Diese Asymmetrie schränkt den Vergleich auf Situationen ein, in denen die Mitgliedsfunktion für den linken Operanden aufgerufen wird. Dieser Ansatz schlägt jedoch fehl, wenn der linke Operand kein Klassentyp ist, beispielsweise beim Versuch, ein Double mit einem Sample-Objekt zu vergleichen.
Um diese Einschränkung zu beheben, können Friend-Funktionen zum Überladen von Operatoren verwendet werden. Friend-Funktionen haben Zugriff auf private Mitglieder der Klasse, sodass sie die Überladung von Operatoren ohne Asymmetriebeschränkung bewältigen können. Der Compiler übersetzt einen Ausdruck wie 10.0 s2 in den Operator (10.0, s2), wenn eine Friend-Funktion verwendet wird.
STL-Algorithmen bevorzugen symmetrische Versionen, da sie Vergleiche in beide Richtungen ermöglichen und eine explizite Reihenfolge in den Operanden überflüssig machen . Allerdings sollten nach Möglichkeit Nicht-Member-Funktionen verwendet werden, um die Kapselung zu verbessern, da Friend-Funktionen den Zugriff auf private Mitglieder ermöglichen.
Zusammenfassend werden Member-Funktionen für Operatoren verwendet, bei denen die Klasseninstanz immer als linker Operand beteiligt ist , während Friend-Funktionen Situationen behandeln, in denen die Klasseninstanz einer der Operanden sein kann. Für mehr Flexibilität und Kapselung sollten Nicht-Member-Funktionen bevorzugt werden, wenn nicht auf private Member zugegriffen wird.
Das obige ist der detaillierte Inhalt vonÜberlastung von Mitglieds- und Nichtmitglieds-Betreibern: Wann werden Friend-Funktionen bevorzugt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!