Die Aufgaben der Klasse O_Stream entsprechen im
Wesentlichen denen der Klasse ostream der bekannten C++
IO-Streams-Bibliothek.
Da die Methode put (char) der Basisklasse Stringbuffer recht unbequem ist, wenn die
zusammenzustellenden Texte nicht nur aus einzelnen Zeichen, sondern
auch aus Zahlen, oder selbst wieder aus Zeichenketten bestehen, werden
in der Klasse O_Stream Möglichkeiten zum Zusammenstellen
verschiedener Datentypen realisiert. In Anlehnung an die bekannten
Ausgabeoperatoren der C++ IO-Streams-Bibliothek wird dazu der
Shift-Operator operator<< verwendet.
Darüberhinaus soll es möglich sein, für die Darstellung
ganzer Zahlen zwischen dem Dezimal-, dem Binär- dem Oktal- und dem
Hexadezimalsystem zu wählen.
öffentliche Methoden
Die folgenden öffentlichen Methoden liefern jeweils eine Referenz
auf ihr eigenes O_Stream Objekt zurück. Dadurch ist es
möglich, in einem Ausdruck mehrere der Operatoren zu verwenden,
z. B. kout << "a = " << a;
Anfügen des Zeichens c an die gesammelten
Zeichen.
O_Stream& operator<< (unsigned char c)
O_Stream& operator<< (char c)
Anfügen der Zahl number in dem gewählten
Zahlensystem.
O_Stream& operator<< (unsigned short number)
O_Stream& operator<< (short number)
O_Stream& operator<< (unsigned int number)
O_Stream& operator<< (int number)
O_Stream& operator<< (unsigned long number)
O_Stream& operator<< (long number)
Anfügen des Zeigerwertes pointer im
Hexadezimalsystem.
O_Stream& operator<< (void* pointer)
Anfügen der nullterminierten Zeichenkette text
(ohne die Nullterminierung).
Um bei der Textformatierung mit Hilfe der Klasse O_Stream das
Zahlensystem bequem wählen und Zeilenumbrüche einfügen
zu können, sollen sogenannte Manipulatoren definiert werden. Der
Ausdruck kout << "a = " << dec << a << " ist hexadezimal " << hex << a <<
endl;
soll dann beispielsweise den Wert der Variablen a erst in dezimaler
und dann in hexadezimaler Schreibweise formatieren und zum
Schluss einen Zeilenumbruch anfügen.
Die gewünschten Eigenschaften können realisiert werden, wenn
hex, dec, oct, bin
und endl als Funktionen (d.h. nicht als Methoden der
Klasse O_Stream) definiert werden, die als Parameter und
Rückgabewert jeweils eine Referenz auf ein O_Stream Objekt
erhalten bzw. liefern. Durch diese Signatur wird bei dem genannten
Ausdruck der bereits erwähnte Operator O_Stream&
O_Stream::operator<< ((*fkt*) (O_Stream&)) ausgewählt, der
dann nur noch die als Parameter angegebene Funktion ausführen
muss.
Insgesamt sollen folgende Manipulatoren definiert werden: