kopier konstruktor
-
hi! ich habe eine klasse die so aussieht... und will einen kopier konstruktor schreiben, und habe dies soweit getan, nur wenn ich diesen ausführe und im main den kopierten vektor ausgeben möchte ist er leer! woran könnte das liegen?
class vektor { private : float a[3]; public : vektor(float ,float ,float ); ~vektor(); vektor &operator=(const vektor &neu); }; vektor& vektor::operator=(const vektor &neu){ vektor kopie; for (int i=0;i<=2;i++) { kopie.a[i] = neu.a[i]; cout << kopie.a[i] << " - " << neu.a[i] << endl; } return *this; } main () { int auswahl; vektor neu(1, 2, 3); vektor dieses(0, 0, 0); dieses = neu; }
-
Mir scheint dir fehlen grundlegende C++ Kenntnisse. Schau dir erstmal ein gutes Tutorial oder Buch an.
Nur soviel:
1. Der Code wird nicht kompiliert werden (weil vektor keinen Standardkonstruktor hat, der aber in Zeile 11 benötigt würde).
2. operator= ist kein Kopierkonstruktor, das ist der Zuweisungsoperator. (was bringt es innerhalb dieses Codes die lokale Variable Kopie zu erstellen? Du verwendest sie nirgends).
-
Die Klasse braucht eigentlich keinen Zuweisungsoperator, weil der vom Compiler generierte schon das richtige tut, aber halt zur Veranschaulichung müsste es so aussehen:
vektor& vektor::operator=(const vektor &neu) { for (int i=0;i<=2;i++) a[i] = neu.a[i]; return *this; }
-
-
Das hab ich mitbekommen, aber vielleicht hat er nur den falschen Begriff benutzt.
-
das waren ja auch nur auszüge aus meinem programm...
klasse vektor...
vektor::vektor(float a1=0,float a2=0,float a3=0) { // STANDARD KONSTRUKT = NULL VEKTOR a[0] = a1; a[1] = a2; a[2] = a3; cout << "-> VE "; } vektor::~vektor() { cout << "<- VE "; } // VEKTOREN SUBTRAHIEREN vektor vektor::operator-(const vektor &neu){ vektor subtrahiert; for (int i=0;i<=2;i++) { subtrahiert.a[i] = neu.a[i] - a[i]; } return subtrahiert; } // VEKTOREN ADDIEREN vektor vektor::operator+(const vektor &neu){ vektor addiert; for (int i=0;i<=2;i++) { addiert.a[i] = neu.a[i] + a[i]; } return addiert; } // SKALARPRODUKT float vektor::skalarprodukt(const vektor &neu){ float skalarprodukt(0); for (int i=0;i<=2;i++) { skalarprodukt += neu.a[i] * a[i]; } return skalarprodukt; } // Operator = vektor& vektor::operator=(const vektor &neu){ vektor kopie; for (int i=0;i<=2;i++) { a[i] = neu.a[i]; } return *this; } // GET X float vektor::get_x()const { return a[0]; } // SET X void vektor::set_x(float neuesx) { a[0] = neuesx; } // GET Y float vektor::get_y()const { return a[1]; } // SET Y void vektor::set_y(float neuesy) { a[1] = neuesy; } // GET Z float vektor::get_z()const { return a[2]; } // SET Z void vektor::set_z(float neuesz) { a[2] = neuesz; } // EINGABE ALS FRIEND istream &operator>>(istream &i, vektor &neu) { float nx,ny,nz; cout << "\n x = "; cin >> nx; neu.set_x(nx); cout << "\n y = "; cin >> ny; neu.set_y(ny); cout << "\n z = "; cin >> nz; neu.set_z(nz); return i; } // AUSGABE ALS FRIEND ostream &operator<<(ostream &o, const vektor &neu) { cout << " ( x, y, z) : ( " << neu.get_x() << ", " << neu.get_y() << ", " << neu.get_z() << ")"; return o; }
-
Warum erstellst du im operator= immer noch die Variable Kopie?