friend operator<< mit zwei parameter
-
friend, damit du auch auf private-elemente zugreifen kannst und um die Verbindung zu verdeutlichen. freie Funktion, da es sonst nicht mit dem Funktionzeiger hinhaut!
-
(D)Evil schrieb:
freie Funktion, da es sonst nicht mit dem Funktionzeiger hinhaut!
funktionszeiger?
-
re
Braunstein schrieb:
Hallo,
Der operator<< dort ist kein Member dieser Klasse sondern eine freie Funktion und friend der Klasse my_text.
wie ist das zu verstehen ? der operator ist ja schliesslich als inline in der klasse drinnen. dazu noch im privaten bereich. wie kann man den dann ueberhaupt als funktionszeiger verwenden?
Meep Meep
-
re
waere das so zuverstehen, das
class my_text { public: my_text(const char *t_str) : str(t_str) { } private: std::string str; friend std::ostream& operator<<(std::ostream &out, const my_text &w) { out << w.str; return out; } };nur eine verkuerzte schreibweise fuer
class my_text { public: my_text(const char *t_str) : str(t_str) { } private: std::string str; friend std::ostream& operator<<(std::ostream &out, const my_text &w); }; inline std::ostream& operator<<(std::ostream &out, const my_text &w) { out << w.str; return out; }ist ?
Meep Meep
-
Ja.
-
[quote]funktionszeiger?[/qoute] ... Meine mich errinern zu können, das es so realisiert wurde ...
-
(D)Evil schrieb:
funktionszeiger?
... Meine mich errinern zu können, das es so realisiert wurde ...
Was ist es, von welchem Funktionszeiger sprichst Du? Was wurde wie realisiert? Im ganzen Thread taucht nicht ein Funktionszeiger auf.
Sprichst Du gern in Rätseln?

-
Sprichst Du gern in Rätseln?

Ja.
Es bezieht sich darauf, wie std::ostream jetzt mit diesem operator<< verfährt und wie std::ostream mit bsw. std::endl usw. verfährt.
(sehe gerade dass Funktionzeiger in diesem Fall nicht verwendet werden sollten, es sei den ich vertue mich gerade)
-
(D)Evil schrieb:
Es bezieht sich darauf, wie std::ostream jetzt mit diesem operator<< verfährt und wie std::ostream mit bsw. std::endl usw. verfährt.
(sehe gerade dass Funktionzeiger in diesem Fall nicht verwendet werden sollten, es sei den ich vertue mich gerade)
Du meinst die Template-Version von operator<<, die Funktionszeiger annimmt? Die ist doch hier völlig unbeteiligt, der zweite Parameter ist eine konkrete Klasse.
Eine freie Funktion muss operator<< vor allem deshalb sein, weil ostream sonst nicht links vom Operator stehen könnte.
-
Guckst du Text in Klammern

-
Meep Meep schrieb:
hola leute
folgendes hab ich bis jetzt noch nicht gesehen und weiß nicht genau was das soll:
class my_text { public: my_text(const char *t_str) : str(t_str) { } private: std::string str; friend std::ostream& operator<<(std::ostream &out, const my_text &w) { out << w.str; return out; } };was hat es da mit dem 'friend' auf sich ?
Meep Meep
Das taucht normalerweise nur im zusammenhang mit Templates auf. Wenn du zB template<class T> my_text hättest, müsste dein op<< so wie oben inline als friend in der Klasse stehen.
Nachzulesen in irgendnem Kapitel von Effektiv C++ oder hier: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.16