Ganz kurze Frage zu Klassen, warum gibt der Compiler das aus?!
-
#include <iostream> using namespace std; class G { int x, y; public: G(int a = 1, int b = 2) { x = a; y = b; } void operator+(G g) { x++; y--; g.x++; g.y--; } void print() { cout << x << y; } }; int main() { G a(3,5), b; a + b; a.print(); b.print(); int x; cin >> x; return 0;}
Ausgabe: 4412
Doch wenn ich das Übungsprogramm durchdenke kommt bei mir 4421 raus warum?
Bei
void operator+(G g) { x++; y--; g.x++; g.y--;
müsste sich das g ja auf das b beziehen und x und y von b müssen sich auf 2 und 1 ändern, aber warum ist das Ergebnis 1 und 2?!
-
Schlechtes C++, du da programmieren tuest.
#include <iostream> using namespace std; class G { int x, y; public: G(int a = 1, int b = 2) : x(a), y(b) { } void operator+(G g) { x++; y--; } void print() { cout << x << y; } }; int main() { G a(3,5), b; a + b; // ruft a.+(b) auf aber nicht b.+(a) a.print(); b.print(); int x; cin >> x; return 0;}
Bei
void operator+(G g) { x++; y--; g.x; g.y;
müsste sich das g ja auf das b beziehen und x und y von b müssen sich auf 2 und 1 ändern, aber warum ist das Ergebnis 1 und 2?!
x,y sind Member und änderst du ab.
g.x; und g.y; sind Member Access Ausdrücke aber du machst nix mit dennen.
-
Nein, das ist nur ein Übungsprogramm, da gehts nur um das Verständnis nicht um den Sinn dahinter
Sorry hatte einen Fehler im Text!
void operator+(G g) { x++; y--; g.x++; g.y--; }
der Abschnitt lautet so!
-
downandout schrieb:
Nein, das ist nur ein Übungsprogramm, da gehts nur um das Verständnis nicht um den Sinn dahinter
Das Ändert nix, dass du dir eine schlechte Syntax angewöhnst, aber nun das sind deine C++ Kentnisse.
-
Ich habe das Programm nicht geschrieben, ich muss es nur zu einem Test beherrschen... kannst bitte nochmal drübergucken habe leider einen Fehler in der Angabe gehabt, weil ich vorher rumprobiert habe
-
G ist eine lokale Kopie im Scope und wird danach gelöscht, du brauchst eine Referenz auf das Objekt.
-
Falsches Forum, besser wäre C++.
-
Zeus schrieb:
G ist eine lokale Kopie im Scope und wird danach gelöscht, du brauchst eine Referenz auf das Objekt.
void operator+(G g) {
x++; y--;
g.x++; g.y--;Ich habe a+b, also wird von a x und y jeweils um eines erhöht.
aber g.x++; g.y--; wird ja auch ausgeführt und müsste ja da b für g übergeben wurde auch erhöht werden oder?Die Änderungen werden ja bei x++; y--; auch durchgeführt oder?
Sorry, aber ich verstehe es immer noch nicht ganz...
-
void operator+(G g) { x++; y--; g.x++; g.y--; }
Dein g von Type G ist nach dem Funktionsaufruf gelöscht.
Teste mal dies:
void operator+(G& g) { x++; y--; g.x++; g.y--; }
-
Dankeschön ich glaube ich habs verstanden
Tüftle schon ewig daran, danke
-
Zeus schrieb:
downandout schrieb:
Nein, das ist nur ein Übungsprogramm, da gehts nur um das Verständnis nicht um den Sinn dahinter
Das Ändert nix, dass du dir eine schlechte Syntax angewöhnst, aber nun das sind deine C++ Kentnisse.
Was ein Schwachsinn.
Wenn es um das Verständnis von Details geht ist es eher förderlich eine Sprache auszureizen und "hässliche" Konstrukte zu schreiben.
-
Gunslinger schrieb:
Zeus schrieb:
downandout schrieb:
Nein, das ist nur ein Übungsprogramm, da gehts nur um das Verständnis nicht um den Sinn dahinter
Das Ändert nix, dass du dir eine schlechte Syntax angewöhnst, aber nun das sind deine C++ Kentnisse.
Was ein Schwachsinn.
Wenn es um das Verständnis von Details geht ist es eher förderlich eine Sprache auszureizen und "hässliche" Konstrukte zu schreiben.
Du hast ja nicht mal meine Kritik verstanden, daher solltest du lieber still sein. Oder Sag mir warum es aus irgendeinen Grund besser ist nicht die Initalisierungsliste zu nehmen? Na?