Operator << für Komplexe zahlen überladen !
-
Ad aCTa schrieb:
Noch weniger wertvoll: Die friend-Variante passt besser.
Das ist wiederum Geschmackssache. Mehr oder weniger... Ich hab gelernt, friend so wenig wie möglich zu verwenden, einfach weils die stärkste Kapselungs-Brechstange ist die es überhaupt gibt.
-
Bacid90210 schrieb:
Hmm ok , verständlich... und wo genau implemetiere ich das ... ???
eigentlich doch in der Klasse std .. wie erlange Zugriff darauf ??doppelt falsch:
- std ist ein Namensraum und keine Klasse
- hast du da überhaupt keinen Zugriff drauf sondern solltest den Operator im selben namespace wie die Klasse als freien Operator implementieren (google: argument dependent lookup)- oder in dem namespace in dem du ihn benutzen willst.
-
pumuckl schrieb:
Ad aCTa schrieb:
Noch weniger wertvoll: Die friend-Variante passt besser.
Das ist wiederum Geschmackssache. Mehr oder weniger... Ich hab gelernt, friend so wenig wie möglich zu verwenden, einfach weils die stärkste Kapselungs-Brechstange ist die es überhaupt gibt.
Gilt das auch für meine Lieblinge, die inline-friends wie
class complex { private: double re,im; public: //Konstruktoren und Arithmetik //Und jetzt kommt er: friend ostream& operator <<(ostream& out,const complex& rhs) { return out << rhs.re << " + " << rhs.im << 'i'; } };
-
Warum friend ?
Wiso eine Referenz auf ostream ?? .... das is zu viel für mich ...
Wenn mir einer die erste Zeile nochmal erklären könnte wäre ich ihm echt dankbar
-
volkard schrieb:
Gilt das auch für meine Lieblinge, die inline-friends wie
Ja - für alle friends, die man ohne übermäßige Kosten vermeiden kann... IIRC wars in einem der Sutter-Bücher wo die Delegation an eine normale Methode delegiert wurde, wie ichs auch im Magazinartikel beschrieben hab:
std::ostream& X::outputToStream(std::ostream&) const; std::ostream& operator<<(std::ostream& lhs, X const& rhs) { return rhs.outputToStream(lhs); }
-
Bacid90210 schrieb:
Warum friend ?
Wiso eine Referenz auf ostream ?? .... das is zu viel für mich ...
Wenn mir einer die erste Zeile nochmal erklären könnte wäre ich ihm echt dankbar
http://www.c-plusplus.net/forum/viewtopic-var-t-is-232010-and-start-is-0.html und folgende
-
Bacid90210 schrieb:
Warum friend ?
Wiso eine Referenz auf ostream ?? .... das is zu viel für mich ...
friend für den zugriff auf private Daten, die Referenz auf ostream zurückliefern, damit man
a << b << c << dschreiben kann.
Das steht allerdings beides in jedem Grundlagenbuch und in jedem besseren Tutorial, vielleicht solltest du dich da nochmal einlesen?
-
Ja das werd ich wohl tun müssen ...
Danke erstmal für eure Tipps ...
-
pumuckl schrieb:
volkard schrieb:
Gilt das auch für meine Lieblinge, die inline-friends wie
Ja - für alle friends, die man ohne übermäßige Kosten vermeiden kann... IIRC wars in einem der Sutter-Bücher wo die Delegation an eine normale Methode delegiert wurde, wie ichs auch im Magazinartikel beschrieben hab:
std::ostream& X::outputToStream(std::ostream&) const; std::ostream& operator<<(std::ostream& lhs, X const& rhs) { return rhs.outputToStream(lhs); }Das mache ich eigentlich nur, wenn es sein muß, nämlich wenn outputToStream virtuell kommt.
-
Das sehe ich ähnlich wie du, volkard. pumuckl und ich haben die Thematik schon einmal kurz diskutiert, siehe hier.
Es gibt also durchaus verschiedene Einstellungen gegenüber
friend.