Übrigens noch einen Nachtrag ala Scott Meyers, die in meinem Beispiel falsch
implementiert waren:
1.)Scott Meyers sagt, das man die Konsistenz zu eingebauten Operatoren waren
sollte.
Der eingebaute Präfix Operator++ ist nach dem Prinzip hole und erhöhe implementiert: das heißt das Objekt wird nach einem Aufruf zwar erhöht jedoch wird vom
Präfix operator++ das alte Objekt zurückgegeben.
Bei der Postfix Form läuft es genau anders herum, zuerst wird erhöht und dann
wird der neue Wert des Objektes zurückgegeben.
Nach dieser Regel würde das so ausschauen:
Code:
const Liste operator++(Liste& l, int){
Liste oldValue= l;
l.weiter();
return oldValue;
}
Da die Rückgabe per Value beim Nutzen virtueller Funktionen nur zu
Kuddelmuddel führt, da ja der oldValue, der zurückgegeben wird, nicht mehr vom Speziellen Typ ist sondern immer vom Basisklassen Typ ist ,würde ich abraten den Präfix opertor++ in deinem Fall
zu überladen oder du machst es auf die vorhin aufgeführte Art und Weise,
dann musst du dir aber darüber im Klaren sein, das dein Operator inkonnsistent,
zu den eingebauten ist.
2.)Scott Meyers sagt, der eingebauten Präfix Operator++ läßt keine zweifache
(hintereinanere) Ausführung zu. Also sowas in der Art sollte verboten werden:
da es
1.) nicht konsistent gegenüber der eingebauten Operatoren ist und
2.) zu Verwirrung führt da wenn der Präfix Operator++ nach dem Prinzip "hole
dann erhöhe" implementiert ist, wird intL nicht zweimal sondern nur einmal
erhöht was dann wahrsch. nicht der Absicht des Aufrufers entspricht.
Ein Ausweg aus dieser Misere ist das Rückgabeobjekt des Präfix
Operator++ als const zu deklarieren.
Diese Sachverhalte sollten dir bei der Implementierung klar sein...
Gruß
Redwing