operator=
-
Also ich habe zwei Strukturen und wollte einen operator= erzeugen, mit dem ich von einer Sturuktur Daten an einen andere übergeben kann.
die definitionen waren kein Problem, nur gibt es keine Zuweisung von der einen an die andere Struktur. Was mache ich da eigentlich falsch?struct halde { int i,j; }; struct _narf { int x,y,z; _narf operator=(halde in); }; _narf _narf::operator=(halde in) { _narf tmp; tmp.x=in.i; tmp.y=in.j; return tmp; } ... int i,j; halde **a=new halde*[2]; for(i=0; i<2; i++) { a[i]=new halde[3]; for(j=0; j<3; j++) { a[i][j].i=i*j; a[i][j].j=i+j; } } _narf aaa={0}; aaa=stru[1][2]; ///aaa bleibt auf (0,0,0)
-
ähm, du erzeugst im operator= ein temporäres Objekt und veränderst nicht das Original.
-
_narf _narf::operator=(const halde& in) { this->x = in.i; this->y = in.j; return *this; }
-
Danke
-
Quiz: Wo besteht bei dem operator= von eVilissimo die Möglichkeit, eine Kopie des Objekts zu sparen?
-
kingruedi schrieb:
Quiz: Wo besteht bei dem operator= von eVilissimo die Möglichkeit, eine Kopie des Objekts zu sparen?
Man liefert einfach keinen Wert zurück, oder?
void _narf::operator=(const halde& in) { this->x = in.i; this->y = in.j; }
gruß,
walker
-
eViLiSSiMo schrieb:
_narf _narf::operator=(const halde& in) { this->x = in.i; this->y = in.j; return *this; }
wozu ist da eigentlich die Referenz da? nur um die Kopie zu sparen oder wofür?
und:
a=b=c; funktioniert damit nicht.
Die Funktion muss dann nochmal ne Referenz zurückgeben.
-
huh?
Warum sollte a=b=c damit nicht funktionieren?_narf _narf::op..
..
return *this;erzeugt ne kopie. ein temporäres objekt das dann a zugewiesen wird.
Genau so wie es sein sollte.
-
wozu ist da eigentlich die Referenz da? nur um die Kopie zu sparen oder wofür?
um unnötige Konstruktor und Destruktor Aufrufe zu sparen.
-
@defod muss danicht ne Referenz zurückgegeben werden? Hm, wieder was gelernt.
-
Online schrieb:
eViLiSSiMo schrieb:
_narf _narf::operator=(const halde& in) { this->x = in.i; this->y = in.j; return *this; }
wozu ist da eigentlich die Referenz da? nur um die Kopie zu sparen oder wofür?
und:
a=b=c; funktioniert damit nicht.
Wiso denn? Was fuer einen Typ haben die Variablen?
a.operator=(b.operator=(c));
Online schrieb:
Die Funktion muss dann nochmal ne Referenz zurückgeben.
Nur um eine Kopie zu erspren.
-
alles klar...mein fehler