C++ PROGRAMMIEREN IM KLARTEXT
MARKO MEYER
C++ PROGRAMMIEREN IM KLARTEXT
>>> NEW TECH
ein Imprint von Pearson Education München • Boston • San Francisco • Harlow, England Don Mills, Ontario • Sydney • Mexico City Madrid • Amsterdam
Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar. Die Informationen in diesem Buch werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig. Fast alle Hardware- und Softwarebezeichnungen, die in diesem Buch erwähnt werden, sind gleichzeitig auch eingetragene Warenzeichen oder sollten als solche betrachtet werden. Umwelthinweis: Dieses Produkt wurde auf chlorfrei gebleichtem Papier gedruckt.
10 9 8 7 6 5 4 3 2 1 07 06 05 04
ISBN 3-8273-7093-0
© 2004 Pearson Studium ein Imprint der Pearson Education Deutschland GmbH Martin-Kollar-Straße 10-12, D-81829 München/Germany Alle Rechte vorbehalten www.pearson-studium.de Lektorat: Dr. Isabel Schneider,
[email protected] Korrektorat: Barbara Decker, München Einbandgestaltung: h2design.de, München Herstellung: Monika Weiher,
[email protected] Satz: mediaService, Siegen (www.media-service.tv) Druck und Verarbeitung: Kösel, Kempten (www.KoeselBuch.de) Printed in Germany
C++ PROGRAMMIEREN IM KLARTEXT
INHALTSVERZEICHNIS KAPITEL 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
KAPITEL 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10
KAPITEL 3 3.1 3.2
ZUR REIHE „IM KLARTEXT“ VORWORT GRUNDLAGEN VON C++
9 10 13
Ein einfaches C++-Programm Variablen Funktionen Eigene Headerdateien Überladung von Funktion Steuerstrukturen Zeiger und Felder Verschiedene Versionen der main-Funktion Zusammenfassung Übungen Literaturempfehlungen
13 17 22 27 30 31 34 38 40 40 41
KLASSEN
43
struct Kapselung Erzeugung, Kopie und Zerstörung von Objekten static-Member Zugriffsschutz class Operatoren Zusammenfassung Übungen Literaturempfehlungen
43 50 53 59 61 66 69 78 78 79
VERERBUNG
81
Bildung von einfachen Klassenhierarchien Vererbung in C++
81 82
3.3 3.4 3.5 3.6 3.7 3.8 3.9
KAPITEL 4 4.1 4.2 4.3 4.4 4.5 4.6
KAPITEL 5 5.1 5.2 5.3 5.4 5.5
KAPITEL 6 6.1 6.2 6.3 6.4 6.5 6.6
KAPITEL 7 7.1 7.2 7.3 7.4 7.5 7.6 7.7
6
Polymorphie Abstrakte Basisklassen protected-Zugriffsschutz Virtuelle Destruktoren Zusammenfassung Übungen Literaturempfehlungen
85 87 89 92 92 92 93
TEMPLATES
95
Generische Programmierung Templatefunktionen Templateklassen Zusammenfassung Übungen Literaturempfehlungen
95 95 97 104 104 105
EXCEPTIONS
107
Klassische Behandlung von Fehlern Ausnahmebehandlung Zusammenfassung Übungen Literaturempfehlungen
107 110 114 115 115
IOSTREAMS
117
Ein- und Ausgabestreams Dateiein- und -ausgaben Stringstreams Zusammenfassung Übungen Literaturempfehlungen
117 123 127 129 129 130
SEQUENZIELLE CONTAINER UND ITERATOREN
131
Container Iteratoren Standard-Container und ihre Eigenschaften Iteratorkategorien Zusammenfassung Übungen Literaturempfehlungen
131 132 132 141 148 148 149
INHALTSVERZEICHNIS
KAPITEL 8 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 8.11
KAPITEL 9 9.1 9.2 9.3 9.4 9.5
STRINGS
151
Konstruktion und Zuweisungsoperatoren von strings Zugriff auf die einzelnen Zeichen des strings Ermittlung der Länge von strings Anhängen und Einfügen Suchen und Ersetzen Löschen von Zeichen Erzeugung von Substrings Umwandlung in C-Strings Zusammenfassung Übungen Literaturempfehlungen
151 152 153 153 156 159 160 160 162 162 163
ASSOZIATIVE CONTAINER
165
Die Standardcontainer map und multimap Die Standardcontainer set und multiset Zusammenfassung Übungen Literaturempfehlungen
165 168 168 169 169
KAPITEL 10 ALGORITHMEN 10.1 10.2 10.3 10.4 10.5 10.6 10.7
Einteilung und Formulierung der Algorithmen Nichtmodifizierende Algorithmen Modifizierende Algorithmen Funktionen und Funktionsobjekte Zusammenfassung Übungen Literaturempfehlungen
KAPITEL 11 MANUELLE SPEICHERVERWALTUNG 11.1 11.2 11.3 11.4 11.5
Automatische Speicherverwaltung Verwendung von new und delete Zusammenfassung Übungen Literaturempfehlungen
ANHANG OPERATOREN IN C++ REGISTER INHALTSVERZEICHNIS
171 171 172 176 185 189 189 190
191 191 192 201 202 202
205 207 7
ZUR REIHE „IM KLARTEXT“ Sie halten einen Band der Reihe „Im Klartext“ in den Händen. Und das ist gut so. Denn mit dem Kauf oder dem Ausleihen dieses Buchs (Ersteres ist uns als Verlag natürlich lieber) haben Sie sich in die optimale Ausgangslage gebracht, um sich nun rasch und effektiv auf eine Vorlesung, Klausur oder mündliche Prüfung vorbereiten zu können. Oder um sich einen Überblick über ein bestimmtes, für Sie neues Thema zu verschaffen. Oder um schon fast vergessenes Grundwissen aufzufrischen. Oder ... Es gibt viele gute Gründe, zu einem „Im Klartext“-Buch zu greifen, und unterschiedliche Möglichkeiten, es durchzuarbeiten. Sie können das Buch ganz klassisch von der ersten bis zur letzten Seite durchlesen oder spontan einzelne Themen herausgreifen und sich nur das entsprechende Kapitel anschauen. Bei der Orientierung helfen Ihnen die Lernziele am Kapitelanfang und die Kapitelzusammenfassungen. Natürlich kann ein schmales Buch wie dieses nicht das gesamte Wissen eines komplexen Fachgebiets oder einer vierstündigen Vorlesung über zwei Semester enthalten. Deshalb gibt es in jedem „Im Klartext“ Hinweise auf weiterführende Literatur, mit der Sie das nun vorhandene Grundwissen anschließend vertiefen können. In den aus dem Englischen übersetzten „Im Klartext“-Büchern wurden die Literaturhinweise am Ende des Buchs um deutschsprachige Literatur ergänzt. Um eine bessere Lesbarkeit zu erreichen, wurde auf die Doppelnennung bei Personenbezeichnungen verzichtet, es sind aber selbstverständlich beide Geschlechter gemeint und angesprochen. Alle „Im Klartext“-Bände wurden von Dozenten geschrieben, die ihre Erfahrungen aus dem Unterricht mitbringen und wissen, wo Studierende oft Verständnisprobleme oder Wissenslücken haben. Durch die Übungsaufgaben im Buch können Sie testen, ob Sie alles Gelesene auch verstanden haben. Ausgewählte Lösungen und Beispielprogramme finden sie auf der Companion Website des Buchs unter www.pearson-studium.de. Und nun viel Spaß mit „Im Klartext“ Ihr Lektorat Pearson Studium
ZUR REIHE „IM KLARTEXT”
9
VORWORT Das vorliegende Buch soll eine Orientierungshilfe zum Studium der Programmiersprache C++ sein und eignet sich vor allem für Leser, die eine systematische Zusammenfassung der wichtigsten Teilgebiete von C++ benötigen; sei es studienbegleitend für die Vorbereitung von Prüfungen zum Thema, projektbegleitend als Kompendium und zum schnellen Nachschlagen, oder auch vertiefend zur Auffrischung bereits erworbener Kenntnisse. Grundsätzlich kann man den Inhalt in zwei Abschnitte einteilen. Die Kapitel 1 bis 5 führen in die in C++ verwendbaren Programmierparadigmen ein; in die Grundlagen der Programmentwicklung mit C++, prozedurale Konzepte (Funktionen), objektorientierte Konzepte (Klassen und Vererbung), Konzepte der generischen Programmierung (Templates), sowie in die Fehlerbehandlung mit Hilfe von Exceptions. Die Kapitel 6 bis 11 führen in Datentypen und Funktionen der C++-Standardbibliothek ein. Insbesondere diese Kapitel sind es, die erfahrungsgemäß auch für Programmierer nützlich sein könnten, die vor langer Zeit von C auf C++ umgestiegen sind, und die Konstrukte der erst seit relativ kurzer Zeit bei vielen Compilern stabilisierten Standardbibliothek noch nicht kennen gelernt haben. Der Leser kann das Buch von vorn nach hinten durcharbeiten; vor allem die ersten 5 Kapitel sind so geschrieben, dass eine aufeinanderfolgende Betrachtung der Inhalte unterstützt wird. Insbesondere die Kapitel über die C++-Standardbibliothek können jedoch auch jeweils einzeln betrachtet werden. Gelegentlich werden Beispiele aus vorderen Kapiteln weitergeführt, dies sollte jedoch auch einer eigenständigen Betrachtung keinen Abbruch tun. Das Buch versucht, in Kürze möglichst viele Konzepte darzustellen, um dem Leser eine Orientierung über die Fähigkeiten von C++ zu geben. Ausgehend von diesem Buch kann er dann mit Hilfe der in jedem Kapitel angebotenen Literaturhinweise das ihn interessierende Thema weiterverfolgen. Um die Auswahl der weiterführenden Literatur zu erleichtern, habe ich versucht, die Literaturhinweise so konkret wie möglich zu fassen. Das Bild, das ich dabei vor Augen hatte, war ein Student, der mit dem vorliegenden Buch in der Hand in die Bibliothek geht, um sich dort die entsprechenden weiterführenden Texte aus dem Regal zu suchen, die jeweils erwähnten Kapitel kurz anzulesen und dann zu entscheiden, welches der Werke er schließlich mitnimmt.
10
VORWORT
Ich habe auf folgende Bücher zurückgegriffen, die ich alle empfehlen kann: Bjarne Stroustrup: „Die C++-Programmiersprache“, 4. Auflage, Addison-Wesley,
2003. Andrew Koenig, Barbara Moo: „Intensivkurs C++“, Pearson Studium, 2003. Scott Meyers: „Effektiv C++ programmieren“, Addison-Wesley, 2003. Scott Meyers: „Mehr Effektiv C++ programmieren“, Addison-Wesley, 2003. Schader/Kuhlins: „Die C++-Standardbibliothek“, 2. Auflage, Springer, 2002. Angelika Langer und Klaus Kreft: „Standard C++ IOStreams and Locales“, Addison-Wesley, 2000.
Alle im Text dargestellten Beispielprogramme, sowie die Lösungen für einige der Übungsaufgaben sind elektronisch auf der Companion Website von Pearson Education Deutschland (http://www.pearson-education.de) verfügbar. Die Beispielprogramme wurden mit dem freien GNU C++-Compiler g++ in der Version 3.3 auf einem Linux-System getestet; sie sollten jedoch auch mit anderen zum C++-Standard konformen Compilern übersetzbar sein. Alle Programme sind Kommandozeilenanwendungen und stellen keine speziellen Anforderungen an graphische Oberflächen. Bevor wir nun zur Betrachtung der Grundlagen von C++ kommen, möchte ich die Gelegenheit nutzen und mich bei den Menschen bedanken, die mich bei der Herstellung dieses Werkes begleitet und unterstützt haben. Zu allererst muss ich dabei meine Freundin Romy Martinetz nennen, die auf viele gemeinsame Stunden verzichtet hat, und mich immer dann wieder aufgerichtet hat, wenn die Arbeit an diesem Buch nicht so voranging, wie ich es mir vorgestellt hatte. Ihr widme ich dieses Buch. Weiterhin danke ich Frank Grimm für seine hilfreichen Kommentare im Vorfeld des Projekts und bei der Korrektur des Textes und Inhalts, sowie Frau Dr. Schneider und den anderen beteiligten Mitarbeitern von Pearson Studium für die stets problemund reibungslose Zusammenarbeit. Erwähnen möchte ich auch meine Kollegen der foobar GmbH und der Forschungsgruppe an der Westsächsischen Hochschule Zwickau (FH), die mir immer wieder Gelegenheit geben, C++ anzuwenden, und meine Kenntnisse in dieser Sprache zu erweitern und verbessern. Ich wünsche dem Leser viel Spaß bei der Programmierung mit C++! Marko Meyer
VORWORT
Leipzig, Januar 2004
11
ül
1 GRUNDLAGEN VON C++ In diesem Kapitel behandeln wir alle grundlegenden Konzepte von C++. Wer dieses Kapitel durchgearbeitet hat, sollte folgende Kenntnisse und Fähigkeiten erworben haben:
Î Entwicklung einfacher Programme in C++, Î Verwendung grundlegender Einrichtungen der Standardbibliothek von C++, Î Erkennen von Programmstrukturen in fremden C++-Quelltexten, Î Strukturierung des Steuerflusses mit Hilfe von Funktionen. 1.1
EIN EINFACHES C++-PROGRAMM
Wir wollen die grundlegenden Konzepte von C++ anhand eines einfachen C++Programms kennen lernen: 1 2 3 4 5 6 7 8
// Einfaches C++-Programm #include int main() { std::cout