Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

iosintro Einführung in das Puffern, die Formatierung und die Ein-/Ausgabe

&pagelevel(3)&pagelevel


In diesem Abschnitt werden die Mechanismen in C++ beschrieben, die der Benutzer
zur Implementierung der Ein-/Ausgabe einsetzen kann. Die Standardbibliothek für Einund Ausgaben wurde in C++ entwickelt und verdeutlicht die Leistungsstärke dieser Programmiersprache.

Das iostream-Paket von C++ beinhaltet hauptsächlich eine Zusammenstellung von Klassen, die in folgenden Include-Dateien deklariert sind:
<iostream.h>, <fstream.h>, <strstream.h>, <stdiostream.h>, <iomanip.h>.
Obwohl ursprünglich nur die Ein- und Ausgabe unterstützt werden sollte, umfaßt das Paket nun auch verwandte Leistungen wie die Bearbeitung von Byte-Feldern (Zeichenketten).


#include <iostream.h>

typedef long streampos, streamoff;

class streambuf;
class ios;
class istream : virtual public ios;
class ostream : virtual public ios;
class iostream : public istream, public ostream;
class istream_withassign : public istream;
class ostream_withassign : public ostream;
class iostream_withassign : public iostream;

extern istream_withassign cin;
extern ostream_withassign cout;
extern ostream_withassign cerr;
extern ostream_withassign clog;

#include <fstream.h>
class filebuf : public streambuf;
class fstreambase : virtual public ios;
class fstream : public fstreambase, public iostream;
class ifstream : public fstreambase, public istream;
class ofstream : public fstreambase, public ostream;

#include <strstream.h>
class strstreambuf : public streambuf;
class strstreambase : virtual public ios;
class istrstream : public strstreambase, public istream;
class ostrstream : public strstreambase, public ostream;
class strstream : public strstreambase, public iostream;

#include <stdiostream.h>
class stdiobuf : public streambuf;
class stdiostream : public ios;

#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 Klassen

Das 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
ostream_withassign
iostream_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öme

cin

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 Klassen

Die 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 Klassen

Klassen, 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
ofstream
fstream

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
ostrstream
strstream

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