Überladen von Pre-Inkrement und Post-Inkrement

8

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.

    
user785099 13.10.2011, 01:37
quelle

4 Antworten

2
  

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 .

    
Marlon 13.10.2011, 01:45
quelle
2

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 ++ ()

    
Bruce Attah 13.10.2011 01:49
quelle
2
  

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%     
visitor 13.10.2011 07:51
quelle
1

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.

    
Keith Thompson 13.10.2011 01:49
quelle

Tags und Links