Ein/Ausgabe Operationen im Objekt



  • Ich will ein Objekt haben, das die Eingabe/Ausgabe Operationen behandelt. Nun will ich dieses Objekt mit entsprechenden streams initializieren. Aber wie genau?

    class io
    {
          std::ostream out;
          std::istream in;
          public:
                 io(const std::ostream& o, const std::istream& i);
                 ~io();
                /*...*/
    };
    

    Was ich bisher gemacht habe funktioniert nicht.



  • Es funktioniert nicht, weil iostreams nicht kopierbar sind. Du müsstest Referenzen (nicht const!) sowohl im Konstruktor, als auch als Member verwenden, also etwa so:

    class io
    {
    public:
        io (std::istream& is, std::ostream& os) : _in (is), _out (os)
        {}
    // ... Überladungen etc.
    private:
        std::istream& _in;
        std::ostream& _out;
    };
    

    Aber eigentlich gibt es dafür doch die iostream-Klasse ?!



  • .filmor, ok, jetzt klappt es.
    Was wäre wenn ich z.B. 3 Objekte schaffe:
    1. Konsole - das ist die übliche Konsole. Man gibt Daten durch die Tastatur ein. Die Ergebnisse kommen in das schwarze Fenster.
    2. LogKonsole - man schreibt wieder mit der Tastatur. Die Ausgabe gehen aber in ein Datei auf Festplatte.
    3. SwapFile - schreiben und lesen per Datei auf Festplatte.
    Alle 3 Beispiele brauchen eine allgemeine Basis, so dass sie einwandfrei voneinander funktionieren. Dazu brauche ich ein Objekt wie io.
    Und jetzt wie kann ich standarte Initialisation machen, d.h. wie mache ich das:

    io(std::ostream& o=cout, std::istream& i=cin)
    

    ?



  • Zdravko schrieb:

    Alle 3 Beispiele brauchen eine allgemeine Basis, so dass sie einwandfrei voneinander funktionieren. Dazu brauche ich ein Objekt wie io.

    Ich habe das Gefühl, Du möchtest irgendwas erreichen, was anders viel einfacher geht. Wozu soll eine 'io' Klasse gut sein? oder anders gefragt, wie sieht die Anwenderschnittstelle von 'io' aus?

    Fragt Werner


Anmelden zum Antworten