Operator überladen
-
Schönen guten Abend
Ich habe folgende Frage an Euch, habe eine Klasse und wollte den operator + überladen um 2 Objekte zu addieren. Das Beispiel dient nur zu Übungszwecken.
Ich weiß das bei Operatorenüberladung mit Methoden die Syntax wie folgt aussieht:rettyp operator + ( typ rechteroperand );
Ich habe meine übergebenen Parameter "const gesetzt damit sie nicht verändert werden können und per Referenz übergeben damit ich mit den Adressen arbeite und nicht wie bei Value mit einer Kopie gearbeitet wird ( Rechnenleistung ).
Meine main:
int main() { CMann man1("Paul",18); CMann man2("Hans",19); man1 = man1 + man2; return 0; }
Meine h.:
class CMann { private: string m_name; int m_alter; public: CMann(string name, int alter); CMann operator + ( const CMann& b); };
Meine cpp.:
CMann::CMann(string name, int alter) { m_name = name; m_alter = alter; } CMann CMann::operator +(const CMann& b) { CMann m1(*this); m_name = m1.m_name + b.m_name; m_alter = m1.m_alter + b.m_alter; return m1; }
Warum funktioniert es nicht? Also Kompiler Fehler habe ich keinen! Vielen Dank im Voraus
Mit freundlichen Grüßen
-
Hab es mir selbst beantwortet !
Lang lebe der Debugger!Falls sich jemand interessiert : (Falls jemand es gelesen hat)
( Auf den Leftoperend wird per *this zugegriffen )So ist es besser:
CMann CMann::operator +(const CMann& b) { m_name = (*this).m_name + b.m_name; m_alter = (*this).m_alter + b.m_alter; return *this; }
Trotzdem Danke
-
nun hast Du aber den linken Operanden verändert ...
So ist es besser:
CMann CMann::operator +(const CMann& b) { CMann m1(*this); m1.m_name = m_name + b.m_name; m1.m_alter = m_alter + b.m_alter; return m1; }
-
Ups stimmt ja
Vielen Dank
-
Belli schrieb:
nun hast Du aber den linken Operanden verändert ...
So ist es besser:
CMann CMann::operator +(const CMann& b) { CMann m1(*this); m1.m_name = m_name + b.m_name; m1.m_alter = m_alter + b.m_alter; return m1; }
Wobei nicht klar wird, wozu du erst *this kopierst, wenn im Anschluss sowieso etwas anderes hineinkommt. Versuch einen nicht existenten += Operator zu verwenden (was einerseits möglich, andererseits hier ineffizient wäre)?
CMann CMann::operator +(const CMann& b) { return {m_name + b.name, m_alter + b.m_alter}; }