ausgabeoperator überladen
-
ich will den operator<< dazu benutzen Strings an clients / server zu senden
soll so aussehen:User /*Klasse, die Client kapselt*/ user /*... hier folgt der rest winsock-code*/ // dann: user << "Hallo, sie sind eingeloggt!"; // etc...
wie muss ich den operator überladen? was soll er zurückliefern? muss ich etwas beachten?
-
ups kommt davon, wenn man sich das problem nicht genauer ansieht
[ Dieser Beitrag wurde am 09.07.2003 um 16:33 Uhr von davie editiert. ]
class User { public: void append (const char*); //fügt dem User das char* zu }; User &operator << (User &u, const char *x) { u.append(x); }
[ Dieser Beitrag wurde am 09.07.2003 um 16:34 Uhr von davie editiert. ]
-
User & operator << (User & user, const char * string);
Und eigentlich ist das der Shift-Operator, der nur zum Ausgeben misbraucht wird.
-
besser waer es glaubich, von ostream zu erben, dann koennen gleich die op<< aller anderen klassen und so verwendet werden.
-
Das heißt, einen eigenen streambuf zu schreiben. Hart, aber machbar. Leider wahrscheinlich nicht für einen "noobie".
-
wie ist das mit dem streambuf gemeint? (worauf bezogen)
geht das nicht, indem man den operator in die Klasse schreibt, sodaß ich nur noch den string zu übernehmen brauche?
-
siehe davies und Heliums Postings
das mit dem streambuf war auf das Erben von ostream bezogen. Wenn du dir die Standardlibrary anguckst, dann gibt es 2 Klassen (iostream mal nicht mitgerechnet), die von ostream erben: ostringstream und ofstream; und beide tun das im wesentlichen, indem sie ostream einen anderen streambuf unterschieben (stringbuf bzw. filebuf). Du könntest also, wenn du hardcore wärst, dasselbe tun.
-
geht das nicht so?:
class User { public: User & operator<< (const string str); }
-
Wer lesen kann ist klar im Vorteil
[ Dieser Beitrag wurde am 09.07.2003 um 18:01 Uhr von Con@n editiert. ]
-
danke für eure Antworten, aber für meine Zwecke reicht es den operator ohne erben von ostream in meine Klasse einzubinden
-
geht das nicht so?:
class User
{
public:
User & operator<< (const string str);
}Ich würde 'ne konstante Referenz auf den String übergeben. Sonst muss alles kopiert werden. Und den Operator überläd man für gewöhnlich global und nicht als Methode.