Problem mit überladen von Operatoren
-
Grüsse euch,
also, ich hab mir mal ein Beispiel zum überladen von Operatoren programmiert. Es funktioniert aber nicht so wie ich mir das vorgestellt habe:
class Haus { public: Haus() { mZustand = 100; } ~Haus() {} int ZustandGeben() { return mZustand; } const Haus& operator++(); const Haus& operator--(); private: int mZustand; }; const Haus& Haus::operator--() { --mZustand; return *this; } const Haus& Haus::operator++() { ++mZustand; return *this; }
Ich hab nun folgendes in der Hauptfunktion stehen:
vector<Haus*> vHaus; for(unsigned int x;x<5;++x) vHaus.push_back(new Haus); cout << "Einheit greift Haus an!" << endl; for(unsigned int v;v<10;++v) vHaus[2]--; cout << "Einheit wurde vernichtet, Zustand des Hauses: " << vHaus[2]->ZustandGeben() << endl; for(unsigned int vv;vv<10;++vv) vHaus[2]++; cout << "Haus repariert, Zustand des Hauses: " << vHaus[2]->ZustandGeben() << endl; for(unsigned int xx;xx<vHaus.size();++xx) delete vHaus[xx];
Irgendwie verändert sich die Elementvariable mZustand nicht, aber ich weis nicht warum, die Operatoren wurden doch richtig überladen!?:
Einheit greift Haus an!
Einheit wurde vernichtet, Zustand des Hauses: 100
Haus repariert, Zustand des Hauses: 100An was liegt das? Ich bedanke mich schon mal für eure Hilfe!
bye
-
die Operatoren wurden doch richtig überladen!?:
Nö. Du überlädst die Präfixvariante, rufst aber die Suffixvariante auf.
Bleibt noch die Frage, wieso das geht?entweder:
--vHaus[2];
oder neben 'const Haus& Haus::operator--()' auch noch 'const Haus Haus::operator--(int)' überladen.
-
habe ich auch gerade bemerkt, hab nun in der Main-Funktion die [edit]Präfix[/edit] variante angewendet, immernoch das selbe Problem
-
for(unsigned int v;v<10;++v)
Mit welchem Wert für v startet denn die Schleife????
@ der_held
Du überlädst die Präfixvariante, rufst aber die Suffixvariante auf.Bleibt noch die Frage, wieso das geht?
Manche Compiler sind so freundlich und geben nur ne Warnung.
-
... und außerdem wendest du ++ und -- auf den Pointer zum Haus an ....
-
Geo schrieb:
Manche Compiler sind so freundlich und geben nur ne Warnung.
der MinGW macht anscheinend nicht einmal dies!
Geo schrieb:
for(unsigned int v;v<10;++v)
Mit welchem Wert für v startet denn die Schleife????
was meinst du?
-
for (unsigned v; v < 10; ++v) cout << v << '\n';
lass dir das ausgeben und du verstehst, was gemeint ist.
-
Um's kurz zu machen: C++ initialisiert nicht mit 0.
Falls du es nicht mitbekommen hast:
Das ist der entscheidende Hinweis:
... und außerdem wendest du ++ und -- auf den Pointer zum Haus an ....
-
Damit gcc-Compiler und damit auch MinGW Warnungen ausgeben, sollte man die Optionen "-Wall" oder noch besser "-W -Wall" setzen.
Grüße
Fux
-
Helium schrieb:
Um's kurz zu machen: C++ initialisiert nicht mit 0.
jetzt ist der schöne lerneffekt weg. außerdem zu sehr generalisiert
-
@davie:
mit einer wahrscheinlichkeit von 1:6553.6 (angenommen int ist short) wird die schleife nichtmal ausgeführt!! Also würde des garnet angezeigt werden!Ich hab so das leise gefühl, Geo und Mobb Deep haben vorher oft PHP programmiert.
-
außerdem zu sehr generalisiert
Klar er kann natürlich auch
for (unsigned v=unsigend(); ...
schreiben