PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stream operator<< in Klasse


Gast
2007-12-17, 13:48:26
Hi,

ich habe im Netz ein Tutorial gesehen, was mich verwirrt, weil ich es anders bisher nicht hinbekomme. Ich möchte einige meiner Klassen Objekte einfach durch einen Stream schicken können und sie kümmern sich selber um ihre Ausgabe in der Konsole. So soll das aussehen:class Foo
{
public:
friend std::ostream& operator<<(std::ostream& out, const Foo& f);
}

//cpp
std::ostream& operator<<(std::ostream& out, const Foo& f)
{
// ... f.private_member;
return out;
}Dies funktioniert auch, finde ich aber irgendwie eigenartig und unschön. Hier ist es doch so, daß die Operatorfunktion << kein Element der Klasse Foo ist, sondern nur einer globalen Funktion mit jener Signatur erlaubt wird auf Foos private-member zuzugreifen?

Und warum funktioniert dieses nicht? So würde ich es eigentlich erwarten...class Foo
{
public:
std::ostream& operator<<(std::ostream& out);
}

//cpp
std::ostream& Foo::operator<<(std::ostream& out)
{
// ... this->private_member;
return out;
}Jemand Idee, warum der Stream Out-Operator hier anders ist?

KhanRKerensky
2007-12-17, 14:18:31
So wie du das beschrieben hast gehts auch, allerdings hast du dann einen sehr merkwürdigen Syntax in der Form

Foo << std::ostream; // also Foo.operator<<(std::ostream&)

Und das verwirrt nur. Deshalb schreibt man sowas als friend function.
Falls du Effective C++ hast oder dir irgentwo ausleihen kannst, dann schau mal in Item 19.