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.


Anmelden zum Antworten