Bag result(*this)
erstellt eine Kopie des Objekts, auf dem die Operatorfunktion aufgerufen wurde.
Beispiel wenn es war:
%Vor% dann wird result
eine Kopie von op1
sein.
Da die Funktion operator+
eine Summe ihrer Operanden macht und die Summe zurückgibt, brauchen wir einen Weg, um auf den Operanden op1 zuzugreifen, der über den this
-Zeiger erfolgt.
Alternativ hätten wir Folgendes tun können:
%Vor%Ihr Code würde folgendermaßen aussehen:
%Vor% Auf das implizite "aktuelle Objekt" für Elementfunktionen wird ein spezieller Wert mit dem Namen this gezeigt. Dann ruft *this
dieses Objekt ab (durch Dereferenzierung von this ), und es wird verwendet, um (über den Kopierkonstruktor) eine andere Tasche namens result zu konstruieren.
Ich vermute, dass dieser Code aus einer Hausaufgabe stammt, also könnten Sie ein echtes Additionsoperator Muster, aber es ist üblich und Sie sollten sich dessen bewusst sein:
%Vor% Sagen Sie dem Code-Writer zuerst, dass er nicht new
als Variablennamen verwenden soll - es ist ein Schlüsselwort. Erinnern Sie sich auch an return result;
. Und übergeben Sie entweder const-reference oder modifizieren Sie direkt den new
bag.
Innerhalb einer Struktur / Klasse ist this
ein Zeiger auf sich selbst. Daher ist *this
eine Referenz auf die gesamte Bag-Instanz selbst.
Die Anweisung Bag result(a_bag_reference)
ruft den Kopierkonstruktor von Bag
auf, wodurch eine Kopie von a_bag_reference
in result
erstellt wird.
Deshalb
%Vor% erstellt eine Kopie von sich selbst und speichert sie dann in result
. Dies macht die nächsten 2 Anweisungen
wirkt sich nicht auf die Instanz selbst aus (d. h. this->x
und this->y
werden konstant gehalten).
Die Funktion operator+
gibt eine Kopie zurück. Die Aussage:
Erstellt eine Kopie von diesem Objekt, um zum Aufrufer zurückzukehren.
Gemäß der Signatur muss es einen Wert zurückgeben, also erstellt es eine Kopie und fügt dann das Objekt new
hinzu.
Bag result(*this);
deklariert eine Variable result
und ruft ihren Kopierkonstruktor auf.
Sie können sich vorstellen, dass C ++ automatisch einen Standard-Kopierkonstruktor für alle Klassen deklariert. Seine Aufgabe ist einfach ein Objekt mit einem anderen Objekt zu initialisieren:
%Vor% Der Ausdruck *this
mag ein wenig beunruhigend wirken, ist aber nur der übliche Horror von C ++, wenn Sie mit &
-Parametern umgehen.
Tags und Links class c++ operator-overloading this