operatoren +,-,<< überladen?!
-
moin,
ich hab diese klasse:
class Vektor3d { float x,y,z; public: Vektor3d(float a, float b, float c) { x = a; y = b; z = c; } Vektor3d() { x=0; y=0; z=0; } void get(float &a, float &b, float &c) { a = x; b = y; c = z; } };
jetzt sollen die operatoren +,-,<< bezügliche der klasse Vektor3d überladen werden. v1,v2,v3 seien objekte vom typ Vektor3d.
Es seien:
v1=(x1,y1,z1)
v2=(x2,y2,z2)
v3=(x3,y3,z3)
mit x,y,z als float.v3=v1 + v2 .. bedeutet ja: x3=x1+x2 , y3=y1+y2 , z3=z1+z2 (binärer operator +)
v3=v1 - v2 .. bedeutet ja: x3=x1-x2 , y3=y1-y2 , z3=z1-z2 (binärer operator -)ich würde ja jetzt "normale" Funktionen machen, aber dann kann ich ja nicht auf die privaten elemente x,y,z zugreifen (die sollen privat bleiben) .. jedoch brauch ich in der Funktion doch 2 Übergabewerte(v1,v2) oder seh ich das falsch?
Bei einer Klassenfunktion kann ich auf die privaten Elemente x,y,z zugreifen jedoch kann ich dann nur einen Übergabeparameter geben?
Geht das in irgendeiner weise mit der Klassenfunktion void get(... ) ??? weiss nämlich gar nich wie ich die mit einbinden soll
Wie soll dass dann gehen?
als nächstes soll dann der << operator überladen werden.
also ein
cout << v1 bedeutet, dass v1 in geeignetem format auf der konsole ausgegeben wird. hmm
kann mir da jemand zu nem lösungsansatz helfen? danköö
-
beispiele aus meiner vector klasse
void operator += (const CVector &v) { x += v.x; y += v.y; z += v.z; } void operator -= (const CVector &v) { x -= v.x; y -= v.y; z -= v.z; } CVector operator + (float f) { return CVector(x + f, y + f, z + f); } CVector operator + (const CVector &v) const { return CVector(x + v.x, y + v.y, z + v.z); } // ausgabe auf der konsole friend std::ostream &operator << (std::ostream &s, const CVector &v) { return s << '(' << v.x << ", " << v.y << ", " << v.z << ')'; }
lass dich inspirieren
-
#ifndef _mho
#define _mho
probier es mal hiermit:
(alle Angaben ohne Gewähr und ist nur ein hack ohne mal kompiliert zu haben)
//in der .h//Methoden: Vektor3d & operator=(const Vektor3d &); Vektor3d & operator+=(const Vektor3d &); //Operatorfunktionen: friend Vektor3d operator+(const Vektor3d &, const Vektor3d &); friend ostream & operator<<(ostream &, const Vektor3d &); //in der .cpp Vektor3d & Vektor3d::operator=(const Vektor3d & vektorSource){ x = vektorSource.x; //.... return * this; //akt Objekt zurück; damit möglich:m1=m2=m3 } Vektor3d & Vektor3d::operator+=(const Vektor3d & vectorSource){ x += vectorSource; //.... return * this; }//OPERATORFUNKTIONEN Vektor3d operator+(const Vektor3d & vektor01, const Vektor3d & vektor02){ Vektor3d vektorSum(vektor01);//dafür brauchst du auch einen Kopierkonstruktor!! vektorSum += vektor02; return vektorSum; } ostream & operator<<(ostream & os, const Vektor3d & vektor){ os<<"Vektor"<<vektor.x<<..... return os; }
-
miller_m schrieb:
void operator += (const CVector &v) { x += v.x; y += v.y; z += v.z; } void operator -= (const CVector &v) { x -= v.x; y -= v.y; z -= v.z; }
Und was machst Du, wenn Du das Ergebnis auch noch einem dritten Vektor zuweisen willst? Das sieht dann nämlich so aus:
CVektor v1, v2, v3; v3 = v1 += v2; //Hier beschwert sich der Compiler //weil operator+= nichts (void) zurückgibt
Da solltest vielleicht Du dich mal ein wenig inspirieren lassen
-
also erstma danke für eure antworten ... habs jetzt ganz simpel gemacht.. einfach so:
class Vektor3d { friend ostream& operator<<(ostream &os, Vektor3d &a); friend Vektor3d operator+(Vektor3d &a, Vektor3d &b); friend Vektor3d operator-(Vektor3d &a, Vektor3d &b); private: float x,y,z; public: ...... }; Vektor3d operator+(Vektor3d &a, Vektor3d &b) { Vektor3d tmp; tmp.x = a.x + b.x; tmp.y = a.y + b.y; tmp.z = a.z + b.z; return tmp; } Vektor3d operator-(Vektor3d &a, Vektor3d &b) { Vektor3d tmp; tmp.x = a.x - b.x; tmp.y = a.y - b.y; tmp.z = a.z - b.z; return tmp; } ostream& operator<<(ostream& os, Vektor3d& a) { os << "[" << a.x << " | " << a.y << " | " << a.z << "]" << endl; }
funzt super!;) und ich habs jetzt geblickt! Danköö