streams?



  • Hi
    ich hab mal ne grundlegende Frage und zwar kenn ich von c her printf/scanf, in c++ gibts dafuer Verknuepfungen von cin/cout mit <</>>
    😕 Was is denn da eigentlich der Unterschied ?
    😕 bzw Wo liegt der Vorteil von Streams ggnueber printf/scanf ?

    (hoffentlich is das jetz auch das richtige Forum fuer das Problem 😞 )



  • ohne anspruch auf vollständigkeit früher mal zusammengetragen:

    der Befehl printf wird oft noch verwendet für die Standart ein und ausgabe.
    Problem 1: der Compiler findet Fehler nicht wie: printf("gebe den Wert %d &s %x \n", 55, "aus in Hexa: " ,55);
    (das falsche Kaufmanns-und statt einem Prozentzeichen vor dem string s ).
    Problem 2: da der Steuerstring (Variante mit angehaengten Werten) zur Laufzeit ausgewertet
    wird, kostet das Zeit, guenstiger waere es, zur Übersetzungszeit festzustellen, wenn ein Wert
    ausgegeben werden soll.
    Problem 3: da erst zur Laufzeit entschieden wird, wie ein Parameter ausgegeben wird, muß printf
    vorsorglich alle moeglicherweise notwendigen Konvertierungsroutinen mit einbinden.(erst zur Laufzeit
    wird ja bei: printf("gebe den Wert %d %s %x \n", 55, "aus in Hexa: " ,55); klar, daß int in Hex
    auzugeben ist. Die printf-Funktion ist daher zusammen mit den ganzen Konvertierungen recht groß.

    Für ein und ausgabe wurden in C++ eigene Klassen definiert. Eingabe istream, Ausgabe ostream
    =iostream.Mit diesen Klassen werden automatisch Objekte angelegt, die die Aufgaben der
    bisherigen Kanaele uebernehmen. (cout für stdout, cin für stdin, cerr für stderr). In den Klassen
    sind eine Vielzahl von Operatorfunktione definiert, die die Symbole "<<" und ">>" überlagern.
    Die Ausgabe ruft mit Hilfe des Symbols "<<" eine Methode der Klasse "cout". Diese Methode fuehrt
    dann die eigendliche Ausgabe durch.
    Die Probleme von printf sind damit überwunden, da der Compiler zur Uebersetzungszeit ermittelt,
    welche Ausgaben gewuenscht werden. Tippfehler werden erkannt. Es braucht keine Interpretation eines
    Steuerstrings. Der Compiler wählt zur Übersetzungszeit aus der menge der überladenen Operatorfunktionen
    anhand des Typs des Parameters die benötigte Funktion aus. Damit werden nur die wirklich
    verwendeten Ausgabe und Konvertierungsroutinen spaeter eingebunden.



  • ich verdeutsche nur mal kurz elises letzten absatz:

    In C muss printf wissen wie ein foo ausgegeben wird.
    In C++ weiss foo selbst wie es ausgegeben wird.



  • Original erstellt von Shade Of Mine:
    **ich verdeutsche nur mal kurz elises letzten absatz:

    In C muss printf wissen wie ein foo ausgegeben wird.
    In C++ weiss foo selbst wie es ausgegeben wird.**

    me glaubt das elises aussage schon deutsch und kurz genug war 🙂



  • Danke !


Anmelden zum Antworten