Überladung des Operators ++
-
Hallo,
folgendes Programm:
#include <iostream> using namespace std; struct Punkt { int x, y; //öffentlich public: Punkt(int xx = 0, int yy = 0) { x = xx; y = yy; } void show(void) { cout << '(' << x << ',' << y << ')' << endl; } Punkt operator++(); }; Punkt Punkt::operator++() { return Punkt(x++, y++); } int main() { Punkt p1, p2; ++p1; p1.show(); p2 = ++p1; p1.show(); p2.show(); return 0; }Wieso wird am Ende (1,1) ausgegeben? Es findet doch eine Zuweisung statt p2 = ++p1;
Vielen Dank!
-
Weil dein Prefix-++ das macht, was ein Postfix-++ machen sollte. Ein Prefix-++ sollte immer so aussehen:
Punkt& operator++() { // Objekt verändern return *this; }
-
Wenn du da auch (2,2) stehen haben willst, solltest du auch ++x und ++y benutzen, nicht postfix++.
Außerdem sollte der prefix++ operator eine Referenz zurückgeben.
-
Okay, danke euch Beiden
-
#include <iostream> struct Punkt { int x, y; Punkt(int xx = 0, int yy = 0) : x(xx), y(yy) //so werden die Variablen mit den Werten initialisiert { } void show() //leere Funktionen brauchen kein (void) { std::cout << '(' << x << ',' << y << ')' << "\n"; //hier brauchst du kein endl, weil es auch einen flush ausführt } Punkt& operator++(); //ohne rückgabe einer Referenz bleibt das Objekt unverändert und nur eine Kopie mit der Value wird übergeben }; Punkt& Punkt::operator++() { x++, y++; return *this; } int main() { using namespace std; Punkt p1, p2; ++p1; p1.show(); // (1.1) p2 = ++p1; p1.show(); // (2.2) p2.show(); // (2.2) }Schau dir mal diesen Artikel über Operatorüberladung an: http://www.c-plusplus.net/forum/232010-full