Ein-/Ausgabe

In C++ steht mit dem Standard-streams-Konzept eine Alternative zu den Funktionen printf(), scanf() und ihren Verwandten zur Verfügung.

Dabei muß es sich gar nicht um Dateien handeln, sondern mit identischen Operationen kann man sogenannte string streams (das sind im Speicher liegende Objekte) ebenso beschreiben und lesen wie Dateien.

Die Standardstreams sind in C++ geschrieben und vom Programmierer modifzierbar. Insbesondere kann man Erweiterungen schreiben, um eigene Datentypen ebenso einfach ein- und ausgeben zu können, wie die vordefinierten Datentypen. Dies wird in diesem Abschnitt aber nicht vorgestellt, sondern nur die einfache Behandlung der existierenden Datentypen; ein Beispiel dafür findet sich in Überladen von Operatoren und in Ein-/Ausgabe mit eigenen Klassen. Solche Modifikationen setzen ein gewisses Verständnis des Klassenbegriffs voraus, der erst im Abschnitt Klassen folgt. Deshalb wird die Ein- und Ausgabe eigener Objekte erst später vorgestellt.

Ebenso wie in C ist die Ein- und Ausgabe nicht Bestandteil der eigentlichen Sprachdefinition, sondern wird über eine eigene Bibliothek abgewickelt. Trotzdem wird dieses Thema gleich hier behandelt. So sind die Beispiele in den folgenden Abschnitten verständlicher und eigene Gehversuche überhaupt erst möglich.

Der wesentliche Vorteil der streams liegt darin, daß damit die fehleranfälligen Parameterlisten der C-Funktionen vermieden werden. Nachteilig ist natürlich, daß man das neue Konzept erst lernen muß, da es sich grundlegend von den alten Funktionsaufrufen unterscheidet.

Für die Verwendung der Ein-Ausgabe benötigt man in C++ die zugehörigen Vereinbarungen in <iostream>.

Grundlage jeder Dateioperation ist ein Objekt vom Typ ostream (Ausgabe), istream (Eingabe) bzw. iostream (Ein- und Ausgabe mit ein und derselben Datei). Jedes solche Objekt entspricht einer geöffneten Datei.

So wie in C mehrere Dateien bei Programmstart automatisch geöffnet werden (stdin, stdout, stderr), existieren in C++ entsprechende Objekte global: cin, cout und cerr wie die C-Dateien, sowie zusätzlich clog. clog entspricht cerr, ist aber im Gegensatz dazu gepuffert.

Im Übrigen sind die Funktionalitäten von Streams nicht auf Dateien beschränkt; beispielsweise kann man identisch in String-ähnliche Gebilde (string streams) schreiben oder daraus lesen.

Damit sollten die folgenden Beispiele verständlich sein; mehr Informationen zu Ein- und Ausgabestreams steht in Streams.

AnyWare@Wachtler.de