Ich habe ein Beispiel zur Implementierung von Pre-Increment und Post-Increment gesehen, das besagt, dass das Überladen von Pre-Increment als
definiert werden kann %Vor%und das Überladen von Post-Inkrementen können wie folgt definiert und implementiert werden:
%Vor%Ich habe zwei Fragen:
1) Was bedeutet "alt"?
2) ++ (* this) wird davon ausgegangen, dass das Vorinkrement verwendet wird, und die ursprüngliche Vorinkrementdefinition hat kein Argument. Allerdings hat es * das hier.
Was bedeutet "alt"?
Die Methode ist ein Post-Inkrement. Der aktuelle Wert ("alter Wert") wird zurückgegeben und dann wird der Wert erhöht ("neuer Wert").
Es wird angenommen, dass++ (* this) das Vorinkrement verwendet, und die ursprüngliche Vorinkrementdefinition hat kein Argument. Allerdings hat es * das hier.
*this
ist kein Argument. Die Klammern sind nicht notwendig, sie dienen der Lesbarkeit.
Dies entspricht ++*this
.
1) "alt" ist der Wert, den "dieses" hatte, bevor es inkrementiert wurde. Post-Inkrement soll diesen Wert zurückgeben.
2) ++ (* this) ist äquivalent zu diesem & gt; operator ++ ()
2) ++ (* this) wird angenommen, dass das Vorinkrement und das Original verwendet werden Pre-Increment-Definition hat kein Argument. Allerdings hat es * das hier.
++ ist ein unärer Operator, also hat es ein Argument in Ordnung. Wenn Sie einen Operator als Elementfunktion überladen, ist das erste Argument das aktuelle Objekt.
Der nicht verwendete Parameter int
ist nur ein Hack, um zwischen Pre- und Post-Inkrement zu unterscheiden, weil operator++
beides bedeuten kann. Post-Inkrement akzeptiert nicht wirklich eine Ganzzahl *, es ist nur ein (umständliches) Sprachkonstrukt.
Sie können diese Operatoren auch als freie Funktionen überladen:
%Vor%* bei normaler Verwendung. Wenn Sie den Operator mithilfe der Funktionsaufrufsyntax aufrufen, können Sie ein zusätzliches int übergeben, um zwischen diesen beiden zu unterscheiden:
%Vor% old
ist einfach ein Variablenname (es ist kein Schlüsselwort, wenn Sie sich gefragt haben). Es wird verwendet, um den vorherigen Wert des Operanden zu speichern.
Tags und Links c++ operator-overloading