Unterschied zwischen Operator Überladung
-
Achso, d. h. es ist ungefähr so wie wenn ich schreibe
a = 3
b = 0b = ++a;
a bleibt trotzdem 3, aber b ist 4.Hab ich das so richtig verstanden?
PS: heute Mittag bin ich ne Weile nichts ins Forum gekommen. CGI... irgendwie aufgebraucht oder so, liegts das an eurem Provider? Oder wieso?
MfG Giovanni
-
Giovanni Rena schrieb:
Achso, d. h. es ist ungefähr so wie wenn ich schreibe
a = 3
b = 0b = ++a;
a bleibt trotzdem 3, aber b ist 4.Hab ich das so richtig verstanden?
PS: heute Mittag bin ich ne Weile nichts ins Forum gekommen. CGI... irgendwie aufgebraucht oder so, liegts das an eurem Provider? Oder wieso?
MfG Giovanni
Es gibt wohl momentan Serverprobleme AFAIK.
Zu deinem Beispiel.
Ich glaub du hast es noch nicht richtg verstanden.int a=3; int b=0; b=++a; //b und a haben den Wert 4 b=a++; //b hat den Wert 4 und a hat den Wert 5 bei der nächsten Verwendung
++a erhöht a um 1 und weisst dann zu. a++ weisst den momentanen wert von a zu und erhöht a danach um 1.
-
a++ erst zuweisen, dann erhöhen!
++a erst erhöhen, dann zuweisen!
jetzt habs aber kapiert, danke prolog, und danke allen anderen!
-
Japp, jetz stimmts.
-
Giovanni Rena schrieb:
a++ erst zuweisen, dann erhöhen!
++a erst erhöhen, dann zuweisen!
jetzt habs aber kapiert, danke prolog, und danke allen anderen!Oder in "Fachsprache":
a++: fetch-and-increment
++a: increment-and-fetch
-
Vektor Vektor::operator ++ (int) { // Incrementiere Aktuelles Objekt // ++AktuellesObjekt Vektor Value; this->Value1++; this->Value2++; return Value; }
Schönen guten Morgen, eine Frage hätte ich noch. Der Parameter (int), eigentlich ist ja mein Datentyp mit dem ich arbeite double. So weit ich weiß, dient int nur dazu zwischen der anderen Increment-Funktion zu unterscheiden (a++). Ist es also vollkommen unwichtig ob ich mit double oder float arbeite, oder wie?
Gruß Giovanni
-
int dient wirklich nur der unterscheidung, weil der compiler den zeichenwust sonst nicht richtig auflösen könnte.
zu deinem code:
bei deinem operator wird ein leeres standardobjekt zurückgegeben, du musst das objekt erst mithilfe des copykonstruktors(Vektor Value(*this)) kopieren, weil die ganze sache sonst nichmehr stimmt.btw, die this zeiger bei deinen Values brauchst du nur, wenn sie vom namen her nicht mehr eindeutig sind(zb wenn du innerhalb der klasse eine methode hast, die eine variable mit dem namen Value1 beinhaltet).
-
kann es vielleicht auch sein, dass der compiler sieht dass es sich um nen numerischen parameter handelt und deshalb es unwichtig ist, ob es double oder int oder float ist. Und dadurch dass es eben nen numerischer parameter ist, ruft er die methode Vektor Vektor::operator ++ (int) auf.
wenn ich also nen int-wert incrementiere, ruft der compiler
Vektor Vektor::operator ++ (int)
auf, und wenn ich nen double wert incrementiere und "gleichzeitig" ne methode mit dem double-parameter mache, dann würde der compiler auch die funktion mit dem doupble-parameter aufrufen
Vektor Vektor::operator ++ (double)
weil diese eben mehr dazu passt, oder?ja, den rest den weiß ich. danke. ich schreibe aber immer tihs-> weil ich gerne solche methoden mache:
Vektor Vektor::operator/ (Vektor Value) { Ergebnis.Value1 = this->Value1 / Value.Value1; Ergebnis.Value2 = this->Value2 / Value.Value2; return Ergebnis; }
und da brauchts man zur unterscheidung...
-
nö.
Ergebnis.Value1=Value1 / Value.Value1;
ist absolut eindeutig
-
ja, gut dass mit this-> da hasts du recht, aber macht das wirklich was aus?
und wie ist es doch noch mal mit dem parameter, hatte ich da recht?