wieso kommen sich diese methoden in die quere?



  • also, ich hab mir eine klasse zum einfachen rechnen mit vectoren erarbeitet.
    dazu gehörten 2 konstruktoren, und mehrere operatorüberladungen(und ein paar berechnungen natürlich).
    so,zuerst hatte ich nur einen konstruktor,

    template <class T>
    Vector::Vector(T x=0,T y=0,T z=0){
             this->x=x;
    	this->y=y;
    	this->z=z;
    }
    

    dann kam mir die idee, dass es sinnvoll währe, einen vector mit einem vector initialisieren zu können

    Vector::Vector(Vector Objekt){
    	this->x=Objekt.VecGetx();
    	this->y=Objekt.VecGety();
    	this->z=Objekt.VecGetz();
    }
    

    doch, seitdem ich das hab, glaubt c++,dass der neue konstruktor eine überladung dieser funktion währe

    Vector Vector::operator*(Vector Operand){
    	Vector Temp;
    	Temp.VecSetx((this->y*Operand.VecGetz())-(this->z*Operand.VecGety()));
    	Temp.VecSety((this->z*Operand.VecGetx())-(this->x*Operand.VecGetz()));
    	Temp.VecSetz((this->x*Operand.VecGety())-(this->y*Operand.VecGetx()));
    	return Temp;
    }
    

    andererseits erkennt er den ersten konstruktor nicht mehr als konstruktor,sodass ich in meiner funktion nun keinen konstruktor mehr hab...



  • Der Kopierkonstruktor bekommt als Parameter eine konstante Referenz auf einen Vektor:

    Vector::Vector(const Vector& Objekt)
    {
      // Du musst nicht vecGetx aufrufen. Innerhalb der Methoden kannst du auch auf private-Variablen direkt zugreifen
      x = Objekt.x;
      // this->x ist auch überflüssig und verwirrt nur
      y = Objekt.y;
      z = Objekt.z;
    }
    

    Noch besser wären allerdings Initialisierungslisten:

    Vector::Vector(const Vector& Objekt) : x(Objekt.x), y(Objekt.y), z(Objekt.z)
    {}
    

    Warum hat deine Methode eigentlich das Präfix Vec? Methoden brauchen keine Präfixe, da sie nicht im globalen Namensraum liegen und deswegen nicht kollidieren.

    edit: operator* übernimmt auch eine konstante Referenz auf einen Vector. Also "const Vector&" anstelle "Vector".


Anmelden zum Antworten