Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.

  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint
Share this Page URL
Help

Vorwort

Vorwort

C++ existiert auf nahezu jeder Plattform, und es gibt unzählig viele Anwendungen, die in dieser Programmiersprache geschrieben sind. Wenn Sie dieses Buch gekauft haben oder darüber nachdenken, es zu kaufen, sind Sie vielleicht sogar ein Software-Entwickler oder Wissenschaftler, der an einer dieser Anwendungen programmiert. Aber unabhängig davon, was Sie programmieren und für welche Plattform Sie programmieren, ist es sehr wahrscheinlich, dass Sie es dabei mit denselben Problemen zu tun bekommen, mit denen sich schon viele andere C++-Programmierer vor Ihnen abgemüht haben. In diesem Buch haben wir Lösungen für viele dieser häufig vorkommenden Probleme sowie eine Erklärung für jede dieser Lösungen zusammengetragen.

Egal ob Sie nun schon seit Jahren in C++ programmieren oder erst seit kurzem mit dieser Sprache arbeiten – Ihnen sind höchstwahrscheinlich schon einige der Dinge bekannt, die Sie in jedem Projekt erneut programmieren müssen. Dazu gehören u.a. das Parsen von Datums- und Zeitangaben und das Rechnen mit Datums- und Zeitangaben, String- und Textmanipulation, Dateiverarbeitung, das Parsen von XML und die Verwendung der Standard-Container. Dies ist die Art von Problemen, für die dieses Buch Ihnen Lösungen anbietet. Bei einigen dieser Problemstellungen (wie z.B. dem Rechnen mit Datums- und Zeitangaben) unterstützt die Standard-Bibliothek Sie nur sehr dürftig. Für andere Probleme (wie z.B. die Manipulation von Strings) bietet die Standard-Bibliothek mächtige Klassen. Leider lässt sich damit auch in diesem Fall nicht jedes Problem lösen, und die Lösung mancher sehr häufig vorkommender Probleme ist trotzdem recht umständlich.

Dieses Buch ist einfach und geradlinig aufgebaut. Jedes Rezept besteht aus einer Problembeschreibung und einem Code-Fragment zur Lösung des Problems. Die meisten Rezepte haben noch einen zusätzlichen Abschnitt, in dem die Lösung genauer besprochen wird. Wir haben immer versucht möglichst pragmatisch an die Probleme heranzugehen und nicht zu weit abzuschweifen. Allerdings gibt es in vielen Fällen verwandte Themen, die so nützlich (oder einfach nur so interessant) sind, dass wir ein oder auch zwei Seiten an Erklärungen benötigen, um darauf näher einzugehen.

In diesem Buch geht es darum, wie man in C++ häufig vorkommende Probleme löst. Zum Erlernen von C++ ist dieses Buch dagegen nicht gedacht. Wir gehen davon aus, dass Sie zumindest über ein grundlegendes Verständnis von C++ und objektorientierter Programmierung verfügen. Es wäre hilfreich, wenn Sie mit folgenden Themen zumindest einigermaßen vertraut sind:

  • Vererbung und virtuelle Methoden in C++

  • Die Standard-Bibliothek

  • Teile der Standard Template Library (Container, Iteratoren und Algorithmen)

  • Templates

Die Kenntnis dieser Themengebiete ist nicht zwingend erforderlich, um dieses Buch zu lesen. Dennoch ist es hilfreich, wenn Sie damit zumindest teilweise vertraut sind.

Uber die Beispiele

Beim Schreiben unserer Code-Beispiele haben wir besonders auf Einfachheit, Portabilität und auf die Performance des Codes geachtet. Beim Design jeder dieser Problemlösungen sind wir nach folgendem Muster vorgegangen: Wenn möglich sollte ein Standard-Feature von C++ (der Sprache oder der Bibliothek) verwendet werden. Wenn das nicht möglich ist, sollte ersatzweise ein De-facto-Standard verwendet werden. So verwenden beispielsweise viele der Rezepte, die sich mit Strings beschäftigen, die standardmäßig vorhandene Klasse String, und die meisten der mathematischen und wissenschaftlichen Rezepte verwenden standardmäßig vorhandene numerische Typen, Container und Templates. Die Standard-Bibliothek bietet für derartige Aufgaben eine ausgezeichnete Unterstützung, weshalb diese Standard-Features von C++ hier überaus nützlich sind. Dagegen existieren für C++ nur wenige oder gar keine Standardmechanismen für Dinge wie Multithreading oder das Parsen von XML. Deshalb verwenden wir die Multithreading-Unterstützung, die von der Boost Threads-Bibliothek bereitgestellt wird, und für das Parsen von XML den Xerces Parser.

In C++ gibt es oftmals mehrere Wege, um ein bestimmtes Problem zu lösen. Das gibt dem Entwickler zwar eine gewisse Flexibilität, kann aber auch zu Meinungsverschiedenheiten über die jeweils beste Vorgehensweise führen. In den meisten Beispielen präsentieren wir Ihnen die beste Lösung, die uns für das jeweilige Problem eingefallen ist. Das heißt aber nicht, dass es sich dabei um die beste Lösung überhaupt handelt. Falls es alternative Lösungen gibt, die in mancher Hinsicht besser und in anderer Hinsicht schlechter, sind präsentieren wir Ihnen die alternative Lösung dennoch (wenn beispielsweise die Lösung, die die Standard Template Library verwendet, hässlich oder unintuitiv, ist präsentieren wir Ihnen eventuell eine Alternative, die die Boost-Bibliotheken verwendet). Dadurch sollen Sie ein Gefühl für die verschiedenen Möglichkeiten bekommen, die es zur Lösung des jeweiligen Problems gibt.

Viele der Beispiele verwenden Templates. Falls Sie bisher noch nicht viel Erfahrung im Schreiben von Templates gesammelt haben, sollten Sie das schleunigst nachholen. In diesem Buch gibt es mit Ausnahme der zwei Rezepte in Kapitel 8 (8.11 und 8.12) sehr wenig einführendes Material zum Thema Templates. Die meisten der interessanten Entwicklungen rund um C++ finden in den Bereichen der Metaprogrammierung mit Templates und des Policy Based Designs statt.

Zum Zeitpunkt, als dieses Buch geschrieben wurde, war in der C++-Gemeinde einiges in Bewegung. Der erste Technical Report (abgekürzt TR1) ist mehr oder weniger fertig. Bei diesem Report handelt es sich um eine standardisierte Liste von Features, die in die nächste Version des C++-Standards einfließen sollen. Zwar ist die Unterstützung durch die Implementierungen der Standard-Bibliothek nicht zwingend, dennoch haben viele Hersteller mit der Implementierung von TR1 bereits begonnen, und man kann davon ausgehen, dass bald erste Compiler mit Unterstützung für TR1 erscheinen werden. Viele der in TR1 spezifizierten Bibliotheken sind zuerst als Teil des Boost-Projekts entstanden.

Wir werden häufig auf Bibliotheken des Boost-Projekts zurückgreifen. Bei Boost handelt es sich um eine Sammlung von portablen Bibliotheken, die als Open Source und unter den Augen vieler Programmierer entwickelt werden und Funktionalität bereitstellen, die in der Standard-Library oft vermisst wird. Zur der Zeit, als diese Zeilen geschrieben wurden, war Version 1.32 aktuell und Version 1.33 sollte demnächst freigegeben werden. In den Beispielen werden Sie häufig auf Verweise zu speziellen Boost-Bibliotheken stoßen. Weitere Informationen über Boost finden Sie auf der Projekt-Website unter www.boost.org.

In diesem Buch verwendete Konventionen

In diesem Buch werden folgende typographische Konventionen verwendet:


Kursivschrift

Hebt neue Begriffe, URLs, E-Mail-Adressen, Dateinamen, Dateierweiterungen, Pfade, Verzeichnisse, Unix-Utilities, Befehle und Kommandozeilenargumente hervor.


<...>

Größer- und Kleinerzeichen umgeben Platzhalter, an deren Stelle Sie einen Kommandozeilen-Parameter angeben müssen. Erscheinen solche Platzhalter im Text, dann werden sie kursiv dargestellt.


Konstante Breite

Wird für Code und Code-Fragmente verwendet. Auch Klassen- und Methodennamen, die im Text vorkommen, werden in konstanter Breite dargestellt.


Konstante Breite und Fettdruck

Kennzeichnet Benutzereingaben in Beispielen, in denen Ein- und Ausgaben zusammen vorkommen.


Konstante Breite und Kursivschrift

Kennzeichnet vom Benutzer anzugebende Teile in Syntax-Beispielen.


Kapitälchen

Werden für Elemente von Benutzeroberflächen wie Menüpunkte und Buttons verwendet.

Kennzeichnet einen Tipp, einen Vorschlag oder eine allgemeine Anmerkung.


Kennzeichnet eine Warnung.


Verwendung von Code-Beispielen

Dieses Buch wurde geschrieben, um Sie bei Ihrer Arbeit zu unterstützen. Im Allgemeinen dürfen Sie die Code-Beispiele aus diesem Buch auch in Ihren eigenen Programmen und in Ihrer Dokumentation verwenden. Sie müssen uns nicht nach unserer Einwilligung fragen, solange Sie nicht eine große Menge Code eins zu eins übernehmen. Wenn Sie beispielsweise ein Programm schreiben und dazu mehrere Code-Teile aus diesem Buch verwenden, benötigen Sie dazu von uns keine Erlaubnis. Wenn Sie dagegen eine CD-ROM mit Beispielen aus O'Reilly-Büchern verkaufen, benötigen Sie sehr wohl unsere Erlaubnis. Beantworten Sie eine Frage, indem Sie dieses Buch zitieren, und verwenden Sie dazu auch ein Code-Beispiel aus diesem Buch, dann benötigen Sie keine Erlaubnis. Wenn Sie aber eine größere Menge von Beispiel-Code aus diesem Buch in Ihre eigene Dokumentation einfließen lassen, benötigen Sie wieder unsere Einwilligung.

Wir schätzen es zwar sehr, wenn Sie unsere Arbeit durch einen Hinweis auf unsere Urheberschaft würdigen, verlangen das aber nicht ausdrücklich. Eine solche Nennung besteht für gewöhnlich aus dem Buchtitel, dem Namen des Autors und des Verlags sowie aus der ISBN. Beispiel: »C++ Kochbuch von D. Ryan Stephens, Christopher Diggins, Jonathan Turkanis und Jeff Cogswell. Verlag O'Reilly, 2006. ISBN 3-89721-447-4«.

Falls Sie sich nicht sicher sind, ob die obige Erlaubnis auch auf Ihren jeweiligen Verwendungszweck zutrifft, können Sie uns gerne unter permissions@oreilly.com kontaktieren.

Danksagungen

Von D. Ryan Stephens

Die wichtigsten Menschen, denen ich hier danken möchte, sind meine Frau Daphne und meine Kinder Jesse, Pascal und Chloe. Ein Buch zu schreiben ist harte Arbeit und kostet sehr viel Zeit, und meine Familie hat mich immer hervorragend unterstützt und es toleriert, wenn ich wieder einmal bis spät in die Nacht im Büro saß.

Des Weiteren möchte ich den technischen Sachverständigen danken, durch deren Arbeit dieses Buch deutlich verbessert wurde. Wie bei so vielem anderen ist es auch hier sehr hilfreich, wenn zwei, drei oder auch vier andere Menschen das Buch auf eine klare Ausdrucksweise und Korrektheit hin überprüfen. In diesem Sinne also vielen Dank an Dan Saks, Uwe Schnitker und David Theese.

Schließlich muss ich noch meinem Lektor Jonathan Gennick für seine Ratschläge danken. Diese bezogen sich meist auf die Grammatik, oftmals auf den Stil, waren gelegentlich erbauend, aber ganz bestimmt immer nützlich.

Von Christopher Diggins

Ich möchte an dieser Stelle Kris Unger, Jonathan Turkanis, Jonathan Gennick und Ryan Stephens für ihre hilfreichen Vorschläge und für ihre konstruktive Kritik danken, durch die ich zu einem besseren Autor geworden bin. Mein besonderer Dank gilt meiner Frau Mélanie Charbonneau, die mein Leben erhellt.

Von Jonathan Turkanis

Da sich die von mir geschriebenen Kapitel mit so vielen kommerziellen Produkten und Open Source-Projekten befassen – und weil ich zu jedem einzelnen dieser Programme so viele Fragen hatte –, gilt mein Dank einer ungewöhnlich großen Zahl von Menschen.

Lassen Sie mich zuerst Ron Liechty, Howard Hinnant und den Entwicklern von Metrowerks dafür danken, dass sie mir jede nur erdenkliche Frage beantwortet und mir mehrere Versionen von CodeWarrior zur Verfügung gestellt haben.

Als Nächstes möchte ich den Entwicklern von Boost.Build und ganz besonders Vladimir Prus, Rene Rivera und David Abrahams danken. Ich danke ihnen aber nicht nur für die Beantwortung meiner Fragen, sondern auch dafür, dass sie das Build-System von Boost entwickelt haben, da es für mich die mit Abstand wichtigste Informationsquelle für Kapitel 1 darstellte.

Weiterhin danke ich Walter Bright von Digital Mars; Greg Comeau von Comeau Computing; P. J. Plauger von Dinkumware; Colin Laplace von Bloodshed Software; Ed Mulroy und Pavel Vozenilek von den borland.public.* Newsgroups; Arnaud Debaene und Igor Tandetnik von microsoft.public.vc.languages; Earnie Boyd, Greg Chicares, Adib Taraben, John Vandenberg und Lennart Borgman von der MinGW-/MSYS-Mailingliste; Christopher Faylor, Larry Hall, Igor Pechtchanski, Joshua Daniel Franklin und Dave Korn von der Cygwin-Mailingliste; Mike Stump und Geoffrey Keating von der GCC-Developers-Liste; Mark Goodhand von DecisionSoft und David N. Bertoni von apache.org.

Außerdem gilt mein Dank Robert Mecklenburg, dessen Buch Managing Projects with GNU make, 3. Auflage, (O'Reilly) mir die Grundlage für meine Behandlung von GNU make lieferte.

Zusätzlich muss noch erwähnt werden, dass Vladimir Prus, Matthew Wilson, Ryan Stephens und Christopher Diggins frühe Versionen des Manuskripts probegelesen und mich durch ihre detaillierte Kritik unterstützt haben.

Schließlich danke ich noch meinem Lektor Jonathan Gennick, meiner Frau Jennifer und meinem Großvater, Louis S. Goodman, der mich wichtige Dinge über das Schreiben gelehrt hat.

  • Safari Books Online
  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint