operator<< überschreiben / nachbauen



  • Hi!

    Wie kann ich den operator<< von ostream überschreiben? Ich will erstmal das hinkriegen, und später dann was eigenes mit einbauen. Bis her hab ich das hier, aber das ist eine rekursive funktion, ohne abbruchbedingung. Ich weiß zB nciht was denn die abbrichbedingung ist.

    ostream& operator<<(ostream& os, char* aus)
    {
       cout << aus;
       return os;
    }
    


  • Wieso kommt cout in deinem Code vor und wieso versuchst den operator für Zeicher auf char zu überladen? Den gibt's schon.



  • Es sollte eher so aussehen:
    [cpp]
    ostream& operator<<(ostream& os, Foo aus)
    {
    os << aus.bla << aus.blub;
    return os;
    }
    [/cpp]
    wobei für die Typen von Foo::bla und Foo::blub bereits ein entsprechender operator << existieren muss.



  • Jaja, ist ja nur nen beipsile. Also, hier mal was ich machen will:

    Ich habe eine Konsolenanwendnung(ein SpieleServer), in die man sozusagen wie in einer dosumgebung was eingeben kann. Natürlich kann der Server während des Eingebens auch was empfangen, was er dann sofort ausgeben soll. Ich möchte aber nicht, dass meine Eingabe dann umgebrochen wird, sondern dass die eingegebene Zeile geklöscht wird, durch die neue überschrieben wird und darunter wieder ausgegeben wird. Und dass das ganze nicht so kompliziert ist mit der Ausgabe dachte ich mir wäre es doch am besten das so zu machen, wie bei cout auch. Deshalb will ich den überschreiben/nachbauen



  • @helium: Wenn ich das so mache:

    ostream& operator<<(ostream& os, char* aus)
    {
       os << aus;
       return os;
    }
    

    dann gibt das auch ne unbegrenzte rekursivität.
    Kann mir keiner mal nen konkretes beispiel für zB char* geben?



  • Maxi2 schrieb:

    Kann mir keiner mal nen konkretes beispiel für zB char* geben?

    Es gibt bereits einen op<< für char*

    Ansonsten:

    ostream& operator<<(ostream& os, char* aus)
    {
       while(*aus)
         os << *aus++;
       return os;
    }
    


  • Willst du mich jetzt verarschen?
    Man braucht irgend einen Typ, dessen implementierung nicht auf das verwenden des << Operators angewiesen ist. Auf den aufbauend kannst du dann << Operatoren für komplexere Typen erschaffen.

    Deine Definition lautet so: Man schickt ein char * an einen Stream, indem an einen char* an einen Stream schickt. Das ist einfach nur Schwachsinn.

    Kann mir keiner mal nen konkretes beispiel für zB char* geben?

    ostream& operator<<(ostream& os, char* aus)
    {
       for (int i=0; aus[i]; ++i)
          os.put(aus[i]);
       return os;
    }
    


  • Zulangsam 😞

    Bis her hab ich das hier, aber das ist eine rekursive funktion, ohne abbruchbedingung. Ich weiß zB nciht was denn die abbrichbedingung ist.

    Geht natürlich auch:

    ostream& operator<<(ostream& os, char* aus)
    {
       if (*aus) {
          os.put(*aus);
          os << ++aus;
       }
       return os;
    }
    


  • sorry, hatte im Moment nen denkfehler 🙂 Aber jetzt ist es mir klar, mit dem Abbruch. Funzt auch.


Anmelden zum Antworten