Streams sollen Datenströme modellieren. Ein Stream ist ein Objekt, in das Daten hineinfließen (Datensenke) oder aus dem Daten herausfließen (Datenquelle). Drei bekannte Streams sind cout, cin und cerr. Die "Fließrichtung" wird dabei vom Computer beziehungsweise dessen Zentralprozesor aus betrachtet.
Genauer betrachtet ist ein Ausgabestream ein Objekt, das einen Puffer verwaltet, in welchen die Daten "hineinfließen" (Datensenke). "Auf dem Weg dorthin" wird ein Datum von seiner internen computergerechten Gestalt in eine Zeichenfolge konvertiert. Eine solche Zeichenfolge dient dazu, dass wir den Wert eines Datums mit unseren Augen lesen können. Sollte der Computer uns einen solchen Wert vorlesen, dann wäre der Wert statt in eine Zeichenfolge in eine Lautfolge zu konvertieren. Vom Puffer können solche Daten also auch einem Ausgabegerät zugeführt werden.
Entsprechend ist ein Eingabestream ein Objekt, das aus einer Datenquelle (Tastatur, Puffer, ...) Zeichenfolgen liefert und beispielsweise einer Variablen zuführt. "Auf diesem Weg" wird eine Zeichenfolge in eine computergerechte Gestalt gemäß Datentyp konvertiert.
Die C++ Standardbibliothek enthält hierfür hilfreiche Klassentemplates und Klassen. Um den Datenfluß mit Streams auf einfache Weise durchführen zu können, sind für die grundlegenden Datentypen die Operatoren "<<" und ">>" überladen. So ist es beispielsweise leicht, hintereinander einen String, eine Ganzzahl und eine Fließkommazahl einem Stream zu entnehmen oder zuzuführen.
Beispiel:
#include <iostream>
|
Wenn Sie selbst einen Typ definieren, dessen Instanzen Sie einem solchen Datenfluss anvertrauen wollen, dann brauchen Sie nur den entsprechenden Operator zu überladen.
Die Klassentemplates sind so gestaltet, dass daraus Klassen für verschiedene "Zeichentypen" gebildet werden können. Wir arbeiten hier ausschließlich mit solchen Klassen, die auf dem Typ char basieren.
Hier werden die folgenden Klassen kurz thematisiert.
ofstream zum Schreiben in eine Datei.
ifstream zum Lesen von einer Datei.
ostringstream zum Schreiben in einen Zeichenfolgen-Puffer.
istringstream zum Lesen von einem Zeichenfolgen-Puffer.