Bei den Zeilennummern werden Leerzeilen nicht mitgezählt.
S. 136 unten "static": Das Schlüsselwort static ist nicht zur Beschränkung des Gültigkeitsbereichs auf eine Datei notwendig, es ist nur eine der Möglichkeiten, es zu tun. Die andere und bessere, von Stroustrup empfohlene Möglichkeit ist die Verwendung eines anonymen Namespaces, also namespace { int global; }
S. 209, oberes Viertel: statt static_cast muss es reinterpret_cast heißen. reinterpret_cast verzichtet im Gegensatz zum static_cast-Operator auf jegliche Typ-Verträglichkeitsprüfung.
S. 335 unten, Text nach der Zuweisung r01 = U2;: Auch Compiler ändern sich. Aktuelle Compiler nehmen korrekterweise den nächst passenden Operator, nämlich Ober::operator=(const Ober&), weil das Argument auf der rechten Seite von Ober erbt. Der Fehler ist jetzt nur noch durch einen Test zur Laufzeit feststellbar: Dem Objekt U1, auf das die Referenz r01 verweist, wird nur der Oberklassenanteil von U2 zugewiesen, das heißt, U1 und U2 unterscheiden sich nach der Zuweisung!
S. 458, 7. Zeile von unten: Vor die Anweisung cout.put(c) sollte
if(cin.good()) (d.h. weder EOF noch Lesefehler) eingefügt werden.
S. 472: In der while-Schleife direkt nach "// lesen:" sollte
zwei Mal !filestream.eof() durch filestream.good() ersetzt werden.
Im Beispiel auf der Seite spielt es zwar keine Rolle, wohl aber, wenn die
Datei fehlerhaft geschrieben worden wäre.
Die geänderte Schleifenstruktur ist sicherer. Das kann leicht durch
Einbau eines Fehlers gezeigt werden, z.B. durch Einfügen der Anweisung
filestream << "X";
direkt nach "// schreiben:". Diese Abweichung von der erwarteten
Syntax für int ist ein Fehler, auf den die geänderte Schleife mit
Abbruch reagiert, die ungeänderte jedoch mit einer Endlos-Schleife, weil
das fehlerhafte Symbol nicht aus der Eingabe verschwindet und so EOF nie erreicht wird.
| zurück |