operator >>



  • Hi, hi

    ich habe gelernt den Ein-/Ausgabe Operator so zu überladen:

    istream& operator>>(istream& is,a& list);
    ostream& operator<<(ostream& os,const a& list);
    

    Für was gibt man den stream aber genau zurück? Vielleicht damit sowas möglich ist:

    cout<<a<<'\n'
        <<b
        <<endl;
    

    Sprich, mehr als nur ein Objekt aus-/eingegeben werden kann?

    Ich würde nämlich gerne bei meiner jetztigen Klasse die Eingabe abbrechen, sobald bei einer Eingabe (sind mehrere Eingaben) eine leere Eingabe gemacht wird.

    if(!cin>>a)
        //Abbrechen
    

    Mit den Standard Typen funktioniert das, aber mit den Objekten meiner Klasse müsste ich das dann ja so machen:

    bool operator>>(istream& is,DVD& dvd)
    

    Sollte man das aber so machen, oder gibt es da eine andere Möglichkeit?



  • Ich verschieb dich mal ins Standard-Forum, hier ist kein Bezug zur Konsole feststellbar 🙂

    MfG SideWinder



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • für die klasse istream ist der !() operator überladen, die klasse checkt also intern, ob die letzte eingabe einen wert hatte und setzt im zweifelsfall einen flag,der dann bei benutzung des !() operators abgefragt wird



  • Dazu habe ich jetzt auch noch mal eine Frage.
    Wenn ich den operator >> nun ueberlade:

    istream operator>>(istream& is,a& list);
    

    Wird dann eine Instanz vom Typ instream& anggelegt, oder ist das wirklich nur der return-Wert.



  • Raptor schrieb:

    Dazu habe ich jetzt auch noch mal eine Frage.
    Wenn ich den operator >> nun ueberlade:

    istream operator>>(istream& is,a& list);
    

    Wird dann eine Instanz vom Typ instream& anggelegt, oder ist das wirklich nur der return-Wert.

    das geht nicht, da du streams nicht kopieren kannst



  • aber sagen wir, ich haette eine klasse foo.
    und eine Funktion func

    foo func(int a, int b);
    

    Wird dann eine Instanz vom Typ foo angelegt, oder ist es nur der return-Wert?

    Und warum kann man streams nicht kopieren.



  • Wird dann eine Instanz vom Typ foo angelegt, oder ist es nur der return-Wert?

    Es wird eine Instanz angelegt, allerdings optimieren das viele Compiler einfach weg.

    MfG Eisflamme



  • Raptor schrieb:

    foo func(int a, int b);
    

    Wird dann eine Instanz vom Typ foo angelegt, oder ist es nur der return-Wert?

    Wie meinst du das?

    Und warum kann man streams nicht kopieren.

    Weil ihr Kopierkonstruktor private ist (bzw. der von basic_ios ist private, und alle Streams sind davon abgeleitet.)


Anmelden zum Antworten