Unärer "-" Operator
-
Hallo Leute,
ich habe mal wieder eine Frage. Ich habe in meiner Klasse
für Vektoren den "-" Operator überladen.Nun möchte ich aber auch den unären "-" Operator überladen.
damit auch sowas möglich ist:CVektor v1;
CVektor v2 = -v1;
So sieht es bis jetzt aus (Auszug)
Im Headerfile:
CVektor operator- (CVektor); // Subtraktion zweier Vektoren
Im C++ File:
CVektor CVektor::operator- (CVektor b)
{
CVektor c;c.m_x = m_x - b.m_x;
c.m_y = m_y - b.m_y;
c.m_z = m_z - b.m_z;
if (m_w == 1.0 || b.m_w == 1.0) c.m_w = 1.0; // Mindestens ein Ortsvektor
else c.m_w = 0.0; // Zwei Vektoren addierenreturn c;
}Viele Dank im Voraus,
Andreas
-
Da hast du sogar zwei Möglichkeiten dafür:
CVector CVector::operator-() { return CVector(0)-*this; } //oder CVector CVector::operator-() { return -1 * *this; }(Alternativ kannst du auch globale Funktionen
CVector operator-(const CVector& op);verwenden.
-
in deiner klasse:
CVector operator-();achja: übergibt bitte bei dem anderen operator die parameter als konstante referenzen, also:
CVektor operator- (const CVektor&);
-
und wenn du dir den Thread unter http://www.c-plusplus.net/forum/viewtopic-var-t-is-193021.html anschaust bzw.
http://www.gotw.ca/gotw/004.htm Punkt 4, dann machst du operator- nicht zum member sondern ueberlaedst den globalen operator- fuer zweiCVectoren
-
nur wenn das sinnvoll möglich ist. was es in diesem fall tatsächlich wäre, wenn man noch den operator+= als member-funktion implementierte.
-
CStoll schrieb:
Da hast du sogar zwei Möglichkeiten dafür:
CVector CVector::operator-() { return CVector(0)-*this; } //oder CVector CVector::operator-() { return -1 * *this; }Das ist aber nicht schön. Ich würde folgendes empfehlen:
CVector CVector::operator -() const { return CVector(-m_x, -m_y, -m_z, -m_w); }Entsprechenden ctor natürlich vorausgesetzt. Der sollte aber sowieso existieren, notfalls non-public.