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".