Vorwort
Dieses Buch bietet eine umfassende Einführung in die Programmiersprache C++. Hierbei handelt es sich um ein Grundlehrbuch mit einem klaren, praxisorientierten Ansatz, der durch zahlreiche Beispiele und andere Lernhilfen unterstützt wird. Anders als andere einführende Bücher enthält dieses auch eine ausführliche Beschreibung der Sprache mit besonderem Augenmerk auf aktuelle und wirkungsvolle Programmiertechniken.
Unzählige Programmierer haben C++ mit einer der früheren Ausgaben gelernt, aber während dieser Zeit ist C++ stark gereift. Mit den Jahren hat sich der Schwerpunkt der Sprache - und der Programmierer - von der Konzentration auf die Effizienz zur Laufzeit zu den Möglichkeiten verschoben, die Programmierer effizienter arbeiten zu lassen. Durch die weiträumige Verfügbarkeit der Standardbibliothek ist es möglich, C++ wirkungsvoller einzusetzen und zu erlernen, als das in der Vergangenheit der Fall war. In die neue Ausgabe dieses Buches sind auch diese neuen Möglichkeiten eingegangen.
Änderungen gegenüber früheren Ausgaben
Für diese Ausgabe haben wir das Buch vollständig umstrukturiert und neu geschrieben, um den modernen Stil der C++-Programmierung hervorzuheben. Jetzt steht die Standardbibliothek im Mittelpunkt, während die Techniken für die Low-Level-Programmierung an Gewicht verloren haben. Wir führen die Standardbibliothek viel früher ein und haben auch die Beispiele geändert, um die Möglichkeiten der Bibliothek einzubeziehen. Außerdem haben wir die Darstellung verschiedener Themen anders angeordnet und klarer gefasst.
Neben Änderungen am ursprünglichen Text haben wir auch einige neue Elemente eingefügt, um das Verständnis für den Leser zu erleichtern. Jedes Kapitel endet mit einer Zusammenfassung und einem Glossar von Fachbegriffen, um Ihnen einen Überblick über die wichtigsten Punkte zu geben. Diese Abschnitte können Sie als Checkliste für Ihren persönlichen Lernfortschritt verwenden: Wenn Sie einen Begriff nicht verstehen, sollten Sie den entsprechenden Abschnitt in dem Kapitel noch einmal lesen. Außerdem haben wir einige weitere Lernhilfen hinzugefügt:
- Wichtige Begriffe erscheinen in Fettschrift, wichtige Begriffe, bei denen wir davon ausgehen, dass sie dem Leser bereits bekannt sind, in kursiver Fettschrift. Jeder dieser Begriffe wird noch einmal im Glossar am Ende des Kapitels aufgeführt.
Wir haben überall die Stellen hervorgehoben, die Ihre Aufmerksamkeit auf besondere Aspekte der Sprache richten, Sie vor Fallgruben warnen, gute Programmiertechniken beschreiben und allgemeine Tipps geben. Durch diese Hinweise sollen Sie als Leser wichtige Tatsachen schneller erfassen und davor bewahrt werden, in die üblichen Fallen zu tappen.
Damit Sie den Beziehungen zwischen den Funktionen und Begriffen besser folgen können, haben wir ausführliche Querverweise eingefügt.
In den Kästen finden Sie Erläuterungen zu wichtigen Begriffen und zusätzliche Erklärungen zu Themen, die für mit C++ nicht vertraute Programmierer besonders schwierig sind.
Um eine Programmiersprache zu lernen, müssen Sie Programme schreiben. Dazu finden Sie in diesem Buch viele Beispiele. Der Quellcode für die ausführlicheren Beispiele steht im Web unter dem folgenden URL zur Verfügung:
http://www.awprofessional.com/cpp_primer
Nicht geändert hat sich jedoch die Tatsache, dass Sie mit diesem Buch eine umfassende, praktische Einführung in C++ in den Händen halten. Wir möchten Ihnen einen klaren, vollständigen und korrekten Leitfaden für diese Sprache bieten. Um Ihnen die Sprache zu vermitteln, geben wir Ihnen eine Folge von Beispielen an die Hand, die Ihnen zusammen mit den Beschreibungen der einzelnen Funktionen zeigen, wie Sie C++ am besten nutzen können. Wir setzen keine Kenntnisse von C voraus (der Sprache, aus der C++ ursprünglich hervorging), gehen aber davon aus, dass Sie bereits in einer modernen, blockorientierten Sprache programmiert haben.
Der Aufbau dieses Buches
Dieses Buch bietet eine Einführung in den internationalen Standard für C++ und deckt dabei sowohl die eigentliche Sprache als auch die umfangreiche Bibliothek ab, die Teil des Standards ist. Ein Großteil der Leistungsfähigkeit von C++ rührt von der Unterstützung für die Programmierung mit Abstraktionen her. Wenn Sie effizient in C++ zu programmieren lernen wollen, müssen Sie mehr tun, als sich nur die Syntax und die Semantik anzueignen. Unser Schwerpunkt liegt darauf, wie Sie die Merkmale von C++ verwenden können, um Programme zu schreiben, die sicher sind, schnell erstellt werden können und doch eine vergleichbare Leistung bieten wie häufig in C geschriebene Low-Level-Programme .
C++ ist eine umfangreiche Sprache, was neue Benutzer vielleicht erschrekken mag. Das moderne C++ können Sie sich als eine Kombination aus drei Elementen vorstellen:
Die größtenteils von C übernommene Low-Level-Sprache
Erweiterte Sprachfunktionen, mit denen Sie Ihre eigenen Datentypen definieren und umfangreiche Programme und Systeme gliedern können
Die Standardbibliothek, die die erweiterten Merkmale nutzt, um einen Satz nützliche Datenstrukturen und Algorithmen bereitzustellen
Die meisten Lehrbücher behandeln C++ in genau dieser Reihenfolge: Sie beginnen mit den Low-Level-Funktionen und führen dann die erweiterten Merkmale ein. Die Standardbibliothek wird erst erklärt, nachdem die gesamte Sprache abgehandelt worden ist. Das führt häufig dazu, dass sich die Leser in den Problemen der Low-Level-Programmierung oder komplexen Typdefinitionen verstricken und niemals wirklich verstehen, welche Möglichkeiten eine abstraktere Programmierung bietet. Dadurch lernen die Leser auch nicht, ihre eigenen Abstraktionen zu erstellen.
In dieser Ausgabe gehen wir ganz anders vor: Wir stellen die Grundlagen der Sprache und die Bibliothek gemeinsam vor. Dadurch können Sie sinnvolle Programme schreiben. Erst nachdem wir eine feste Grundlage zur Nutzung der Bibliothek und zum Schreiben der Art von abstrakten Programmen gelegt haben, die die Bibliothek ermöglicht, fahren wir mit den Merkmalen von C++ fort, mit deren Hilfe Sie Ihre eigenen Abstraktionen schreiben können.
Teil I und II behandeln die Grundlagen der Sprache und der Bibliothek. Der Schwerpunkt dieser Teile liegt darauf, Ihnen beizubringen, wie Sie C++-Programme schreiben und Abstraktionen der Bibliothek einsetzen. Die meisten C++-Programmierer müssen im Grunde genommen alles wissen, was in diesen Teilen besprochen wird.
Diese ersten beiden Teile sollen Ihnen nicht nur die Grundlagen von C++ beibringen, sondern dienen auch noch einem anderen Zweck. Die Funktionen der Bibliothek sind selbst in C++ geschriebene abstrakte Datentypen. Daher kann die Bibliothek mit den Möglichkeiten zur Konstruktion von Klassen geschrieben werden, die jedem C++-Programmierer zur Verfügung stehen. Nach unserer Erfahrung mit der Schulung in C++ können Sie viel einfacher lernen, Ihre eigenen Typen zu erstellen, wenn Sie zunächst gut entworfene abstrakte Typen verwenden.
In Teil III bis V geht es darum, wie Sie Ihre eigenen Typen schreiben. Teil III führt Sie in das Herzstück von C++ ein: die Unterstützung für Klassen. Der Klassenmechanismus ist die Grundlage, um eigene Abstraktionen zu schreiben, und das Fundament für objektorientierte und generische Programmierung, die wir in Teil IV behandeln. Dieses Buch schließt mit Teil V über erweiterte Merkmale ab, die hauptsächlich dazu eingesetzt werden, große, komplexe Systeme zu gliedern.
Danksagungen
Wie bei den früheren Ausgaben dieses Buches möchten wir auch diesmal Bjarne Stroustrup für seine unermüdliche Arbeit an C++ und seine langjährige Freundschaft danken. Außerdem danken wir Alex Stepanov für seine Ideen, aus denen die Container und Algorithmen hervorgingen, die jetzt den Kern der Standardbibliothek ausmachen. Schließlich geht unser Dank an die Mitglieder des C++-Standardisierungskomitees für die harte Arbeit, die sie aufgewendet haben, um C++ viele Jahre lang klarer zu gestalten, zu verfeinern und zu verbessern.
Wir schulden auch unseren Lektoren Dank, deren hilfreiche Kommentare zu mehreren Entwürfen uns zu vielen großen und kleinen Verbesserungen angeregt haben: Paul Abrahams, Michael Ball, Mary Dageforde, Paul DuBois, Matt Greenwood, Matthew P. Johnson, Andrew Koenig, Nevin Liber, Bill Locke, Robert Murray, Phil Romanik, Justin Shaw, Victor Shtern, Clovis Tondo, Daveed Vandevoorde und Steve Vinoski.
Das amerikanische Original dieses Buches wurde mit Latex und den vielen Zusatzpaketen zur Latex-Distribution gesetzt. Unser Dank gilt den Mitgliedern der Latex-Gemeinschaft, die uns ein so leistungsfähiges Werkzeug für den Satz zur Verfügung gestellt haben.
Die Beispiele in diesem Buch wurden mit dem GNU- und dem Microsoft-Compiler kompiliert. Unser Dank gilt den Entwicklern und all denen, die weitere C++-Compiler erstellt haben und C++ damit Wirklichkeit werden ließen.
Schließlich danken wir den hervorragenden Mitarbeitern bei Addison-Wesley, die dieses Buch bis zur Veröffentlichung geführt haben: Debbie Lafferty, unsere ursprüngliche Lektorin, die diese Ausgabe angeregt und dieses Buch schon seit der ersten Ausgabe begleitet hat; Peter Gordon, unser neuer Lektor, der darauf bestanden hat, den Inhalt zu aktualisieren und umzugestalten, und das Buch dadurch verbessert hat; Kim Boedigheimer, die uns bei der Terminplanung geholfen hat; sowie Tyrrell Albaugh, Jim Markham, Elizabeth Ryan und John Fuller, die uns in der Entwurfs- und Produktionsphase begleitet haben.