Inhaltsverzeichnis

zum Buch C++ -Einführung und professionelle Programmierung

Vorwort zur 9. Auflage   17
Vorwort   19
Teil I   Objektorientierte Programmierung mit C++   21
1   Einführung   23
       1.1   Compiler   26
2   Grundlegende Begriffe   27
       2.1   Das erste Programm   27
           2.1.1   Struktur eines C++-Programms   33
           2.1.2   Integrierte Entwicklungsumgebung (IDE) für Windows   34
           2.1.3   Andere Editoren und Entwicklungsumgebungen   36
           2.1.4   KDevelop – Entwicklungsumgebung für Linux/KDE   39
           2.1.5   Namenskonventionen   40
       2.2   Einfache Datentypen und Operatoren   41
           2.2.1   Ausdruck   41
           2.2.2   Ganze Zahlen   42
           2.2.3   Reelle Zahlen   47
           2.2.4   Konstante   52
           2.2.5   Zeichen   53
           2.2.6   Logischer Datentyp bool   56
           2.2.7   Referenzen   58
           2.2.8   Regeln zum Bilden von Ausdrücken   59
       2.3   Gültigkeitsbereich und Sichtbarkeit   60
           2.3.1   Namespace std   62
       2.4   Kontrollstrukturen   63
           2.4.1   Anweisungen   63
           2.4.2   Sequenz (Reihung)   65
           2.4.3   Auswahl (Selektion, Verzweigung)   65
           2.4.4   Fallunterscheidungen mit switch   73
           2.4.5   Wiederholungen   75
           2.4.6   Kontrolle mit break und continue   83
       2.5   Benutzerdefinierte und zusammengesetzte Datentypen   85
           2.5.1   Aufzählungstypen   85
           2.5.2   Arrays: Der C++-Standardtyp vector   87
           2.5.3   Zeichenketten: Der C++-Standardtyp string   93
           2.5.4   Strukturierte Datentypen   95
           2.5.5   Komplexe Zahlen: Der C++-Standardtyp complex   96
3   Einfache Ein- und Ausgabe   99
       3.1   Standardein- und -ausgabe   99
       3.2   Ein- und Ausgabe mit Dateien   102
4   Programmstrukturierung   107
       4.1   Funktionen   107
           4.1.1   Aufbau und Prototypen   108
           4.1.2   Gültigkeitsbereiche und Sichtbarkeit in Funktionen   111
       4.2   Schnittstellen zum Datentransfer   113
           4.2.1   Übergabe per Wert   113
           4.2.2   Übergabe per Referenz   118
           4.2.3   Gefahren bei der Rückgabe von Referenzen   119
           4.2.4   Vorgegebene Parameterwerte und variable Parameterzahl   120
           4.2.5   Überladen von Funktionen   121
           4.2.6   Funktion main()   124
           4.2.7   Beispiel Taschenrechnersimulation   124
           4.2.8   Spezifikation von Funktionen   130
       4.3   Modulare Programmgestaltung   132
           4.3.1   Steuerung der Übersetzung nur mit #include   133
           4.3.2   Einbinden vorübersetzter Programmteile   133
           4.3.3   Dateiübergreifende Gültigkeit und Sichtbarkeit   135
           4.3.4   Übersetzungseinheit, Deklaration, Definition   137
           4.3.5   Compilerdirektiven und Makros   140
       4.4   Funktions-Templates   147
           4.4.1   Spezialisierung von Templates   150
           4.4.2   Einbinden von Templates   151
       4.5   inline-Funktionen   153
       4.6   Standardfunktionen / Bibliotheken   155
5   Objektorientierung 1   157
       5.1   Abstrakte Datentypen   157
       5.2   Klassen und Objekte   159
           5.2.1   inline-Elementfunktionen   163
       5.3   Initialisierung und Konstruktoren   164
           5.3.1   Standardkonstruktor   165
           5.3.2   Allgemeine Konstruktoren   166
           5.3.3   Kopierkonstruktor   169
           5.3.4   Typumwandlungskonstruktor   171
       5.4   Beispiel: Klasse für rationale Zahlen   173
           5.4.1   Aufgabenstellung   173
           5.4.2   Entwurf   174
           5.4.3   Implementation   178
       5.5   const-Objekte und Methoden   183
       5.6   Faustregeln zur Konstruktion von Schnittstellen   184
       5.7   Destruktoren   188
       5.8   Wie kommt man zu Klassen und Objekten? Ein Beispiel   190
           5.8.1   Einige Analyse-Überlegungen   191
           5.8.2   Design   194
       5.9   Gegenseitige Abhängigkeit von Klassen   197
6   Intermezzo: Zeiger   201
       6.1   Zeiger und Adressen   201
       6.2   C-Arrays   205
           6.2.1   C-Arrays und sizeof   207
           6.2.2   Indexoperator bei C-Arrays   208
           6.2.3   Initialisierung von C-Arrays   208
           6.2.4   Zeigerarithmetik   208
       6.3   C-Zeichenketten   210
       6.4   Dynamische Datenobjekte   217
           6.4.1   Freigeben dynamischer Objekte   220
       6.5   Zeiger und Funktionen   223
           6.5.1   Parameterübergabe mit Zeigern   223
           6.5.2   Parameter des main-Programms   226
           6.5.3   Gefahren bei der Rückgabe von Zeigern   226
       6.6   Mehrdimensionale C-Arrays   228
           6.6.1   Statische mehrdimensionale C-Arrays   228
           6.6.2   Dynamisch erzeugte mehrdimensionale Arrays   233
       6.7   Binäre Ein-/Ausgabe   235
       6.8   Zeiger auf Funktionen   239
       6.9   Zeiger auf Elementfunktionen und -daten   243
           6.9.1   Zeiger auf Elementfunktionen   244
           6.9.2   Zeiger auf Elementdaten   245
       6.10   this-Zeiger   245
       6.11   Komplexe Deklarationen lesen   246
7   Objektorientierung 2   249
       7.1   Eine String-Klasse   249
           7.1.1   friend-Funktionen   255
       7.2   Klassenspezifische Daten und Funktionen   257
           7.2.1   Klassenspezifische Konstante   260
       7.3   Klassentemplates   262
           7.3.1   Ein Stack-Template   262
           7.3.2   Stack mit statisch festgelegter Größe   265
           7.3.3   Ökonomische Instanziierung von Templates   267
           7.3.4   Member-Template   269
           7.3.5   Template-Metaprogrammierung   269
8   Vererbung   273
       8.1   Vererbung und Initialisierung   280
       8.2   Zugriffsschutz   281
       8.3   Typbeziehung zwischen Ober- und Unterklasse   283
       8.4   Code-Wiederverwendung   284
       8.5   Überschreiben von Funktionen in abgeleiteten Klassen   286
       8.6   Polymorphismus   287
           8.6.1   Virtuelle Funktionen   287
           8.6.2   Abstrakte Klassen   293
           8.6.3   Virtuelle Destruktoren   300
       8.7   Vererbung und andere Beziehungen   302
           8.7.1   Vererbung   302
           8.7.2   Der Teil und das Ganze   305
           8.7.3   Assoziation   305
           8.7.4   Benutzt-Beziehung   307
       8.8   Mehrfachvererbung   307
           8.8.1   Namenskonflikte   311
           8.8.2   Virtuelle Basisklassen   313
           8.8.3   Virtuelle Basisklassen und Initialisierung   314
9   Überladen von Operatoren   317
       9.1   Rationale Zahlen – noch einmal   319
           9.1.1   Arithmetische Operatoren   319
           9.1.2   Ausgabeoperator
       9.2   Eine Klasse für Vektoren   324
           9.2.1   Index-Operator [ ]      327
           9.2.2   Zuweisungsoperator =   329
           9.2.3   Mathematische Vektoren   332
           9.2.4   Multiplikations-Operator   333
       9.3   Zuweisungsoperator und Vererbung   334
       9.4   Inkrement-Operator ++   339
       9.5   Typumwandlungsoperator   343
       9.6   Smart-Pointer: Operatoren -> und *   345
           9.6.1   Smart Pointer und die C++-Standardbibliothek   351
       9.7   Objekte als Funktionen   352
10   Fehlerbehandlung   355
       10.1   Ausnahmebehandlung   357
           10.1.1   Exception-Spezifikation in Deklarationen   361
           10.1.2   Exception-Hierarchie in C++   361
           10.1.3   Besondere Fehlerbehandlungsfunktionen   364
           10.1.4   Erkennen logischer Fehler   365
           10.1.5   Durch Exceptions verursachte Speicherlecks vermeiden   368
       10.2   Speicherbeschaffung mit new   369
11   Ein Werkzeugkasten   373
       11.1   Behälterklassen (Container)   373
           11.1.1   Container-Arten   376
       11.2   Listen   377
       11.3   Warteschlangen   384
       11.4   Iteratoren   388
           11.4.1   Iterator für eine Listen-Klasse   390
           11.4.2   Iteratoren auf nicht-veränderliche Elemente   395
       11.5   Sortierte Listen   396
       11.6   Mehrdimensionale Matrizen   402
           11.6.1   Zweidimensionale Matrix   403
           11.6.2   Dreidimensionale Matrix   406
       11.7   Fehlersuche mit Trace-Objekten   409
           11.7.1   Klasse Trace   411
           11.7.2   Anwendungsbeispiel   415
12   Vermischtes   419
       12.1   Namensräume   419
       12.2   C++-Header   422
       12.3   Einbinden von C-Funktionen   424
       12.4   Standard-Typumwandlungen   424
       12.5   Standard-Typumwandlungsoperatoren   426
       12.6   Typinformationen zur Laufzeit   430
           12.6.1   Typidentifizierung mit typeid()   430
           12.6.2   Anwendung: Eine Menge graphischer Objekte   431
           12.6.3   Vor- und Nachteile der Laufzeittyp-Information   437
       12.7   Unions   437
       12.8   Bitfelder   438
       12.9   Automatische Typermittlung mit auto   439
       12.10   Delegierender Konstruktor   440
       12.11   Netzwerk-Programmierung   441
       12.12   GUI-Programmierung   442
           12.12.1   Ereignisgesteuerte Programmierung   443
           12.12.2   GUI-Programmierung mit Qt   443
13   Dateien und Ströme   449
       13.1   Ausgabe   450
           13.1.1   Formatierung der Ausgabe   452
       13.2   Eingabe   456
           13.2.1   Eingabe von Leerdaten mit Return   459
       13.3   Manipulatoren   461
           13.3.1   Eigene Manipulatoren   465
       13.4   Fehlerbehandlung   466
       13.5   Typumwandlung von Dateiobjekten nach bool   468
       13.6   Arbeit mit Dateien   469
           13.6.1   Positionierung in Dateien   470
           13.6.2   Lesen und Schreiben in derselben Datei   471
       13.7   Eingabe benutzerdefinierter Typen   473
       13.8   Umleitung auf Strings   474
Teil II   Die C++-Standardbibliothek   477
14   Aufbau und Übersicht   479
       14.1   Auslassungen   481
       14.2   Beispiele des Buchs und die C++-Standardbibliothek   483
15   Hilfsfunktionen und -klassen   485
       15.1   Relationale Operatoren   485
       15.2   Paare   485
       15.3   Tupel   486
       15.4   Funktionsobjekte   488
           15.4.1   Arithmetische, vergleichende und logische Operationen   489
           15.4.2   Funktionsobjekte zum Negieren logischer Prädikate   489
           15.4.3   Binden von Argumentwerten   490
           15.4.4   Zeiger auf Funktionen in Objekte umwandeln   492
16   Container   495
       16.1   Gemeinsame Eigenschaften   496
           16.1.1   Reversible Container   499
       16.2   Sequenzen   500
           16.2.1   vector   502
           16.2.2   vector<bool>   503
           16.2.3   list   504
           16.2.4   deque   507
           16.2.5   stack   509
           16.2.6   queue   510
           16.2.7   priority_queue   512
           16.2.8   array   515
       16.3   Sortierte assoziative Container   516
           16.3.1   map   516
           16.3.2   multimap   523
           16.3.3   set   523
           16.3.4   multiset   526
       16.4   Hash-Container   528
           16.4.1   unordered_map   530
           16.4.2   unordered_multimap   536
           16.4.3   unordered_set   536
           16.4.4   unordered_multiset   540
       16.5   bitset   540
17   Iteratoren   545
       17.1   Iterator-Kategorien   546
           17.1.1   Anwendung von Traits   548
       17.2   distance() und advance()   551
       17.3   Reverse-Iteratoren   551
       17.4   Insert-Iteratoren   551
       17.5   Stream-Iteratoren   554
18   Algorithmen   555
       18.1   Nicht-verändernde Algoritmen   555
           18.1.1   for_each   555
           18.1.2   find und find_if   555
           18.1.3   find_end   556
           18.1.4   find_first_of   557
           18.1.5   adjacent_find   557
           18.1.6   count und count_if   558
           18.1.7   mismatch   559
           18.1.8   equal   560
           18.1.9   search   560
           18.1.10   search_n   561
       18.2   Modifizierende Algorithmen   561
           18.2.1   copy und copy_backward   561
           18.2.2   swap, iter_swap und swap_ranges   563
           18.2.3   transform   564
           18.2.4   replace und Varianten   567
           18.2.5   generate und generate_n   567
           18.2.6   fill und fill_n   568
           18.2.7   remove und Varianten   569
           18.2.8   unique und unique_copy   570
           18.2.9   reverse und reverse_copy   571
           18.2.10   rotate und rotate_copy   571
           18.2.11   iota   571
           18.2.12   random_shuffle   572
           18.2.13   partition und stable_partition   573
       18.3   Sortieren und Verwandtes   574
           18.3.1   sort   574
           18.3.2   stable_sort   576
           18.3.3   partial_sort und partial_sort_copy   576
           18.3.4   nth_element   577
       18.4   Binäre Suche   578
           18.4.1   binary_search   579
           18.4.2   lower_bound   579
           18.4.3   upper_bound   580
           18.4.4   equal_range   580
       18.5   Verschmelzen (merge)   582
           18.5.1   Verschmelzen an Ort und Stelle (inplace_merge)   584
       18.6   Mengenoperationen auf sortierten Strukturen   585
           18.6.1   includes   585
           18.6.2   set_union   586
           18.6.3   set_intersection   587
           18.6.4   set_difference   588
           18.6.5   set_symmetric_difference   589
       18.7   Heap-Algorithmen   590
           18.7.1   pop_heap   592
           18.7.2   push_heap   592
           18.7.3   make_heap   593
           18.7.4   sort_heap   594
       18.8   Minimum und Maximum   594
       18.9   Lexikographischer Vergleich   596
       18.10   Permutationen   596
19   Ein- und Ausgabe   599
20   Nationale Besonderheiten   601
       20.1   Sprachumgebungen festlegen und ändern   601
           20.1.1   locale-Elementfunktionen   602
           20.1.2   Namespace std-globale Funktionen   603
       20.2   Zeichenklassifizierung und -umwandlung   603
       20.3   Kategorien   604
           20.3.1   collate   605
           20.3.2   ctype   605
           20.3.3   numeric   607
           20.3.4   monetary   609
           20.3.5   time   612
           20.3.6   messages   614
       20.4   Konstruktion eigener Facetten   615
21   Numerisches   617
       21.1   Komplexe Zahlen   617
       21.2   Grenzwerte von Zahltypen   618
       21.3   Halbnumerische Algorithmen   620
           21.3.1   accumulate   620
           21.3.2   inner_product   621
           21.3.3   partial_sum   622
           21.3.4   adjacent_difference   622
       21.4   Optimierte numerische Arrays (valarray)   625
           21.4.1   Konstruktoren   625
           21.4.2   Elementfunktionen   626
           21.4.3   Binäre Valarray-Operatoren   629
           21.4.4   Mathematische Funktionen   631
           21.4.5   slice   632
           21.4.6   slice_array   634
           21.4.7   gslice   635
           21.4.8   gslice_array   638
           21.4.9   mask_array   638
           21.4.10   indirect_array   639
22   String   641
23   Typerkennung zur Laufzeit   651
24   Speichermanagement   653
       24.1   <new>   653
       24.2   <memory>   654
25   C-Header   657
       25.1   <cassert>   657
       25.2   <cctype>   657
       25.3   <cerrno>   658
       25.4   <cfloat>   658
       25.5   <ciso646>   658
       25.6   <climits>   659
       25.7   <clocale>   659
       25.8   <cmath>   659
       25.9   <csetjmp>   659
       25.10   <csignal>   659
       25.11   <cstddef>   659
       25.12   <cstdarg>   660
       25.13   <cstdio>   661
       25.14   <cstdlib>   661
       25.15   <cstring>   662
           25.15.1   Abweichung vom C-Standard   662
           25.15.2   Funktionen für C-Strings   663
           25.15.3   Funktionen für C-Strings maximaler Länge   664
           25.15.4   Funktionen für Bytefelder   664
       25.16   <ctime>   665
           25.16.1   Datentypen   665
           25.16.2   Funktionen   666
26   Nachwort   667
A   Anhang   669
       A.1   Programmierhinweise   669
       A.2   Die wichtigsten C++-Schlüsselwörter   673
       A.3   ASCII-Tabelle   673
       A.4   Änderungen im C++-Standard   676
       A.5   Rangfolge der Operatoren   677
       A.6   Compilerbefehle   678
       A.7   Make-Dateien   679
           A.7.1   Programmerzeugung für ein Projekt   680
       A.8   Installation von Qt 4   681
           A.8.1   Installation von Qt4 unter Windows   681
           A.8.2   Integration von Qt in ein Dev-C++-Projekt   681
           A.8.3   Installation von Qt4 unter Linux   682
       A.9   Lösungen zu den Übungsaufgaben   683
Literaturverzeichnis   737
OOP-Glossar   739
Stichwortverzeichnis   747


Impressum