Wie kann man den Operator ++ auf zwei verschiedene Arten für Postfix a++
und Präfix überladen ++a
?
c++
operator-overloading
Anfänger
quelle
quelle
Antworten:
Sollte so aussehen:
quelle
Number operator++ (int)
einint
als Parameter verwendet, obwohl Sie ihn nicht verwenden?++x
ist Präfix und ruft somit auf,operator++()
währendx++
Postfix ist und somit anruftoperator++(int)
Der Unterschied liegt darin, welche Signatur Sie für Ihre Überladung (en) von wählen
operator ++
.Zitiert aus dem entsprechenden Artikel zu diesem Thema in den C ++ - FAQ (weitere Informationen finden Sie dort):
PS: Als ich davon erfuhr, sah ich anfangs nur den Dummy-Parameter, aber die verschiedenen Rückgabetypen sind tatsächlich interessanter. Sie könnten erklären, warum dies
++x
als effizienter alsx++
allgemein angesehen wird .quelle
Sie haben zwei Möglichkeiten, die beiden (Präfix / Postfix) ++ - Operatoren für einen Typ T zu überladen:
Objektmethode:
Dies ist der einfachste Weg, wenn Sie die "allgemeine" OOP-Sprache verwenden.
Objekt Nichtmitgliedsfunktion:
Dies ist eine andere Möglichkeit, dies zu tun: Solange sich die Funktionen im selben Namespace befinden wie das Objekt, auf das sie sich beziehen, werden sie berücksichtigt, wenn der Compiler nach einer Funktion sucht, die verarbeitet
++t ;
odert++ ;
codiert werden soll:Es ist wichtig, sich daran zu erinnern, dass diese Nicht-Mitgliedsfunktionen aus Sicht von C ++ (einschließlich eines C ++ - Compilers) immer noch Teil der Schnittstelle von T sind (solange sie sich im selben Namespace befinden).
Es gibt zwei mögliche Vorteile der Nicht-Mitgliedsfunktionsnotation:
quelle
Erklären Sie wie folgt:
Richtig implementieren - nicht mit dem herumspielen, von dem jeder weiß, dass er es tut (inkrementieren, dann verwenden, verwenden, dann erhöhen).
quelle
Ich weiß, dass es spät ist, aber ich hatte das gleiche Problem und fand eine einfachere Lösung. Versteh mich nicht falsch, dies ist die gleiche Lösung wie die Top-Lösung (gepostet von Martin York). Es ist nur ein bisschen einfacher. Nur ein wenig. Hier ist es:
Die obige Lösung ist etwas einfacher, da in der Postfix-Methode kein temporäres Objekt verwendet wird.
quelle