In diesem Abschnitt werden die Mechanismen in C++ beschrieben, die der Benutzer Das iostream-Paket von C++ beinhaltet hauptsächlich eine Zusammenstellung von Klassen, die in folgenden Include-Dateien deklariert sind: #include <iostream.h> typedef long streampos, streamoff; class streambuf; extern istream_withassign cin; #include <fstream.h> #include <strstream.h> #include <stdiostream.h> #include <iomanip.h> | |
Zum iostream-Paket gehören einige Funktionen, die Zeichen liefern, aber den Rückgabetyp int aufweisen. Der Datentyp int wird verwendet, damit alle Zeichen im Zeichensatzdes Rechners einschließlich des Wertes EOF - als Hinweis auf einen Fehler - zurückgegeben werden können. Gewöhnlich wird ein Zeichen in einer Speicherstelle des Typschar oder unsigned char abgelegt. Das iostream-Paket besteht aus einer Reihe von zentralen Klassen, die die grundlegende Funktionalität der Ein-/Ausgabe-Umwandlung und der Pufferung bereitstellen,sowie aus mehreren spezialisierten Klassen, die aus den zentralen Klassen abgeleitetwurden. Die beiden Klassenarten werden nachstehend aufgelistet. Die Include-Datei <iomanip.h> stellt Makrodefinitionen zur Verfügung, die der Programmierer bei der Definition eigener parametrisierter Manipulatoren (siehe manip) verwenden kann. Zentrale KlassenDas Kernstück des iostream-Paketes setzt sich aus folgenden Klassen zusammen: streambuf Dies ist die Basisklasse für Puffer. Sie unterstützt die Einfügung (Speicherung) und die Extraktion (Entnahme) von Zeichen. Aus Effizienzgründen wurden die meisten Elementfunktionen als Inline-Versionen implementiert. Die öffentliche Schnittstelle der Klasse streambuf wird bei sbufpub beschrieben, während die geschützte Schnittstelle(für abgeleitete Klassen) im Abschnitt zu sbufprot erläutert wird. ios Dies ist die Basisklasse für die stream-Ein-/Ausgabe in C++. Diese Klasse enthältStatusvariablen, die verschiedenen stream-Klassen gemeinsam sind, beispielsweiseFehler- und Formatstatus (siehe ios ). istream Diese Klasse unterstützt formatierte und unformatierte Umwandlungen von Zeichenfolgen, die aus streambuf-Objekten entnommen werden (siehe istream ). ostream Diese Klasse unterstützt formatierte und unformatierte Umwandlungen in Zeichenfolgen, die in streambuf-Objekten gespeichert werden (siehe ostream ). iostream Diese Klasse kombiniert istream und ostream . Sie wurde für Fälle entwickelt, in denenbidirektionale Operationen (also das Einfügen in bzw. die Extraktion von einer Zeichenfolge) benötigt werden (siehe ios ). istream_withassign Diese Klassen fügen Zuweisungsoperatoren und einen Konstruktor ohne Operandenzur entsprechenden Klasse ohne Zuweisung hinzu. Die vordefinierten Datenströme (siehe unten) cin, cout, cerr und clog sind Objekte dieser Klassen (siehe istream , ostream und ios ). Vordefinierte Datenströmecin Dies ist die Standardeingabe (Dateideskriptor 0), die stdin in der Programmiersprache C entspricht. cout Dies ist die Standardausgabe (Dateideskriptor 1), die stdout in der Programmiersprache C entspricht. cerr cerr ist der Standardfehlerstrom (Dateideskriptor 2). Die Ausgabe über den Datenstrom ist einheitengepuffert; Zeichen werden also nach jeder Insert-Operation ausdem Puffer an das C-Lauzeitsystem übergeben (siehe ostream::osfx() bei ostream und ios::unitbuf bei ios ). cerr entspricht stderr in der Programmiersprache C. clog Dieser Datenstrom wird ebenfalls an den Dateideskriptor 2 umgeleitet, im Gegensatzzu cerr ist die Ausgabe aber gepuffert. cin, cerr und clog sind mit cout verknüpft. Jede Benutzung dieser Datenströme führtdazu, daß der cout-Puffer geleert wird. Neben den oben aufgelisteten zentralen Klassen enthält das iostream-Paket weitere,daraus abgeleitete Klassen, die in anderen Include-Dateien deklariert sind. Sie könnendie abgeleiteten Klassen verwenden oder aus den zentralen Klassen iostream eigeneKlassen ableiten. Aus streambuf abgeleitete KlassenDie aus streambuf abgeleiteten Klassen definieren Einzelheiten über die "Erzeugung" oder das "Verbrauchen" von Zeichen. Die Ableitung einer Klasse aus streambuf (diegeschützte Schnittstelle) wird im Abschnitt zu sbufprot erläutert. Die verfügbaren Pufferklassen sind: filebuf Diese Pufferklasse unterstützt die Ein-/Ausgabe über Dateideskriptoren. Elementfunktionen unterstützen das Öffnen, Schließen und Positionieren. Üblicherweise muß einProgramm nicht auf die Dateideskriptoren zugreifen (siehe filebuf ). stdiobuf Diese Pufferklasse unterstützt die Ein-/Ausgabe über stdio-FILE-Strukturen. Sie sollteverwendet werden, wenn Quellcode in den Sprachen C und C++ nebeneinander verwendet wird. Für neue Programme wird die Verwendung von filebuf empfohlen (siehe stdiobuf ). strstreambuf Diese Pufferklasse speichert und entnimmt Zeichen aus Byte-Feldern (z.B. Zeichenketten) im Hauptspeicher (siehe sstreambuf ). Aus istream, ostream und iostream abgeleitete KlassenKlassen, die aus istream , ostream und iostream abgeleitet sind, stellen einen Spezialfall der zentralen Klassen für die Verwendung einer bestimmten Art von streambuf-Objektendar. Diese Klassen sind: ifstream Diese Klassen unterstützen die formatierte Ein-/Ausgabe in und aus Dateien. Ein filebuf-Objekt wird für die Ein-/Ausgabe verwendet. Allgemeine Operationen (wie das Öffnen oder Schließen) können direkt - ohne explizite Nennung des filebuf-Objektes -auf die Datenströme angewendet werden (siehe fstream ). fstreambase Die für alle 3 Klassen gemeinsamen Elementfunktionen sind in der Klasse fstreambase definiert. istrstream Diese Klassen unterstützen die Bearbeitung von Byte-Feldern (z.B. Zeichenketten) und setzen die Klasse strstreambuf ein (siehe strstream ). strstreambase Die für diese Klassen gemeinsamen Elementfunktionen sind in der Klasse strstre- ambase definiert. stdiostream Diese Klasse ist eine Spezialisierung von iostream für stdio-FILE-Objekte (siehe stdiobuf ). | |
BESONDERHEITEN | |
Die Performance von Programmen, die von cin nach cout kopieren, kann teilweise verbessert werden, indem die Verknüpfung zwischen cin und cout gelöst und der cout-Puffer explizit geleert wird. Einige Elementfunktionen von streambuf und ios (die in diesem Abschnitt nicht erläutert wurden) sind lediglich aus Gründen der Abwärtskompatibilität zum älteren stream-Paket verfügbar. | |
SIEHE AUCH | filebuf, fstream, ios, istream, manip, ostream, sbufprot, sbufpub, strstream, sstreambuf, stdiobuf |