Operator X und X=
-
@C Newbie
Jup. Sehr guter Hinweis. Ich werde meinen Beitrag entsprechend korrigieren.
-
int main() { int a[5]; int* i=a; i+1=3; }
g++ schrieb:
test.cpp: In function `int main()':
test.cpp:5: error: non-lvalue in assignment:p
-
hm ich glaube wir reden dran vorbei.
Ok, ich geb ne klasse vor und ihr sagt mir wie die aussehen müsste mit den beiden Operatoren, ist glaub ich am einfachsten für alle:
class Vector4D { public: double x; double y; double z; double w; };
-
zur Halbzeit: C Newbie : otze : freshman 1 : 0 : 0
CNewbie.isRight();
freshman.say("respect");
-
C Newbie schrieb:
int main() { int a[5]; int* i=a; i+1=3; }
g++ schrieb:
test.cpp: In function `int main()':
test.cpp:5: error: non-lvalue in assignment:p
sorry, ein *() vergessen^^
-
aber doch wohl die Attribute als private, like:
class Vector4D { private: double x; double y; double z; double w; public: Vector4D & operator+=(const Vector4D & vecSource); friend const Vector4D operator+(const Vector4D & vec01, const Vector4D & vec02); //oder als freie Fkt?? }; Vector4D & Vector4D::operator+=(const Vector4D & vecSource){ x += vecSource.x; y += vecSource.y; z += vecSource.z; w += vecSource.w; return * this; } const Vector4D operator+(const Vector4D & vec01, const Vector4D & vec02){ Vector4D vecSum(vec01); vecSum += vec02; return vecSum; }
-
Um das mal in eine lesbare Form zu bringen
int a[5]; int* i=a; *(i+1)=3; // ist gleich i[1] = 3;
-
@Freshman:
muss das nicht so lauten?Vector4D & Vector4D::operator+=(const Vector4D & vecSource){ x += vecSource.x; y += vecSource.y; z += vecSource.z; w += vecSource.w; return * this; }
-
C Newbie schrieb:
Um das mal in eine lesbare Form zu bringen
int a[5]; int* i=a; *(i+1)=3; // ist gleich i[1] = 3;
ja, aber die dereferenzierung ist bei nem const objekt nicht möglich-.-
-
freshman schrieb:
public: Vector4D & operator+=(const Vector4D & vecSource); //friend const Vector4D operator+(const Vector4D & vec01, const Vector4D & vec02); //muss kein friend sein, da die Funktion vollständig mit der öffentlichen Schnittstelle implementiert werden kann
-
@***: ne, wie kommst du denn da drauf'? glaube ich nicht...........
***.isRight(); //hast schon recht: + habe ich im Eifer des Gefechts glatt verschluckt
-
siehe hierzu auch (Klasse Complex):
http://www.gotw.ca/gotw/004.htm
http://www.c-plusplus.net/forum/viewtopic.php?t=79400
http://www.c-plusplus.net/forum/viewtopic.php?t=79472
-
BTW, es gibt auch sprachen, wo sowas geht:
let x + 3 = 5;
danach ist x dann eben 2.
-
Dann wird der Compiler das:
let x + 3 = 5;
in das:
x = 5 - 3;
oder:
x = 5 + (-3);
verwandeln. Also muss man dann noch zusätzlich einen der - Operatoren überladen.