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;         
    }
    


  • @Bashar:

    neuer neuling schrieb:

    und will einen kopier konstruktor schreiben



  • 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?


Anmelden zum Antworten