Ulrich Breymann
Der C++-Programmierer
C++ lernen - professionell anwenden - Lösungen nutzen
Inhaltsverzeichnis
8
Vorwort
26
Teil I: Einführung in C++
30
1 Es geht los!
32
1.1 Historisches
32
1.2 Objektorientierte Programmierung
33
1.3 Compiler
35
1.4 Das erste Programm
36
1.4.1 Namenskonventionen
41
1.5 Integrierte Entwicklungsumgebung
42
1.6 Einfache Datentypen und Operatoren
44
1.6.1 Ausdruck
44
1.6.2 Ganze Zahlen
44
1.6.3 Reelle Zahlen
50
1.6.4 Konstante
54
1.6.5 Zeichen
55
1.6.6 Logischer Datentyp bool
59
1.6.7 Referenzen
60
1.6.8 Regeln zum Bilden von Ausdrücken
60
1.6.9 Standard-Typumwandlungen
62
1.7 Gültigkeitsbereich und Sichtbarkeit
63
1.7.1 Namespace std
65
1.8 Kontrollstrukturen
66
1.8.1 Anweisungen
66
1.8.2 Sequenz (Reihung)
68
1.8.3 Auswahl (Selektion, Verzweigung)
68
1.8.4 Fallunterscheidungen mit switch
72
1.8.5 Wiederholungen
74
1.8.6 Kontrolle mit break und continue
81
1.9 Benutzerdefinierte und zusammengesetzte Datentypen
84
1.9.1 Aufzählungstypen
84
1.9.2 Strukturen
86
1.9.3 Der C++-Standardtyp vector
87
1.9.4 Zeichenketten: Der C++-Standardtyp string
92
1.9.5 Container und Schleifen
95
1.9.6 Typermittlung mit auto
96
1.9.7 Unions und Bitfelder
97
1.10 Einfache Ein- und Ausgabe
99
1.10.1 Standardein- und -ausgabe
99
1.10.2 Ein- und Ausgabe mit Dateien
103
2 Programmstrukturierung
108
2.1 Funktionen
109
2.1.1 Aufbau und Prototypen
109
2.1.2 Gültigkeitsbereiche und Sichtbarkeit in Funktionen
111
2.1.3 Lokale static-Variable: Funktion mit Gedächtnis
112
2.2 Schnittstellen zum Datentransfer
113
2.2.1 Übergabe per Wert
114
2.2.2 Übergabe per Referenz
118
2.2.3 Gefahren bei der Rückgabe von Referenzen
119
2.2.4 Vorgegebene Parameterwerte und unterschiedliche Parameterzahl
120
2.2.5 Überladen von Funktionen
121
2.2.6 Funktion main()
122
2.2.7 Beispiel Taschenrechnersimulation
123
2.2.8 Spezifikation von Funktionen
127
2.2.9 Alternative Funktions-Syntax
128
2.3 Modulare Programmgestaltung
128
2.3.1 Steuerung der Übersetzung nur mit #include
129
2.3.2 Einbinden vorübersetzter Programmteile
129
2.3.3 Dateiübergreifende Gültigkeit und Sichtbarkeit
131
2.3.4 Übersetzungseinheit, Deklaration, Definition
133
2.3.5 Präprozessordirektiven und Makros
135
2.4 Funktions-Templates
141
2.4.1 Spezialisierung von Templates
144
2.4.2 Einbinden von Templates
145
2.5 inline-Funktionen
146
2.6 constexpr-Funktionen
147
2.7 Namensräume
150
2.8 C++-Header
151
2.8.1 Einbinden von C-Funktionen
153
3 Objektorientierung 1
154
3.1 Abstrakte Datentypen
154
3.2 Klassen und Objekte
156
3.2.1 const-Objekte und Methoden
160
3.2.2 inline-Elementfunktionen
160
3.3 Initialisierung und Konstruktoren
162
3.3.1 Standardkonstruktor
162
3.3.2 Direkte Initialisierung der Attribute
163
3.3.3 Allgemeine Konstruktoren
163
3.3.4 Kopierkonstruktor
166
3.3.5 Typumwandlungskonstruktor
168
3.3.6 Konstruktor und mehr vorgeben oder verbieten
171
3.3.7 Einheitliche Initialisierung und Sequenzkonstruktor
171
3.3.8 Delegierender Konstruktor
173
3.3.9 constexpr-Konstruktor und -Methoden
174
3.4 Beispiel: Rationale Zahlen
177
3.4.1 Aufgabenstellung
177
3.4.2 Entwurf
179
3.4.3 Implementation
182
3.5 Destruktoren
187
3.6 Wie kommt man zu Klassen und Objekten? Ein Beispiel
189
3.7 Gegenseitige Abhängigkeit von Klassen
193
4 Intermezzo: Zeiger
196
4.1 Zeiger und Adressen
197
4.2 C-Arrays
200
4.2.1 C-Array und sizeof
202
4.2.2 Initialisierung von C-Arrays
202
4.2.3 Zeigerarithmetik
203
4.2.4 Indexoperator bei C-Arrays
204
4.2.5 C-Array mit begin() und end() durchlaufen
204
4.3 C-Zeichenketten
205
4.4 Dynamische Datenobjekte
212
4.4.1 Freigeben dynamischer Objekte
214
4.5 Zeiger und Funktionen
217
4.5.1 Parameterübergabe mit Zeigern
217
4.5.2 Parameter des main-Programms
219
4.5.3 Gefahren bei der Rückgabe von Zeigern
220
4.6 this-Zeiger
221
4.7 Mehrdimensionale C-Arrays
221
4.7.1 Statische mehrdimensionale C-Arrays
221
4.7.2 Array als Funktionsparameter
222
4.7.3 Dynamisch erzeugte mehrdimensionale Arrays
226
4.7.4 Klasse für dynamisches zweidimensionales Array
228
4.8 Binäre Ein-/Ausgabe
234
4.9 Zeiger auf Funktionen
237
4.10 Standard-Typumwandlungen für Zeiger
240
4.11 Zeiger auf Elementfunktionen und -daten
242
4.11.1 Zeiger auf Elementfunktionen
242
4.11.2 Zeiger auf Elementdaten
243
4.12 Komplexe Deklarationen lesen
243
4.12.1 Lesbarkeit mit typedef und using verbessern
244
5 Objektorientierung 2
246
5.1 Eine String-Klasse
246
5.1.1 friend-Funktionen
252
5.2 Klassenspezifische Daten und Funktionen
253
5.2.1 Klassenspezifische Konstante
257
5.3 Klassen-Templates
259
5.3.1 Ein Stack-Template
259
5.3.2 Stack mit statisch festgelegter Größe
261
5.4 Template-Metaprogrammierung
263
5.5 Variadic Templates: Templates mit variabler Parameterzahl
265
5.5.1 Klassen-Templates mit variabler Stelligkeit
268
5.6 Typbestimmung mit decltype
270
5.6.1 declval
273
6 Vererbung
274
6.1 Vererbung und Initialisierung
280
6.2 Zugriffsschutz
281
6.3 Typbeziehung zwischen Ober- und Unterklasse
283
6.4 Code-Wiederverwendung
284
6.4.1 Konstruktor erben
285
6.5 Überschreiben von Funktionen in abgeleiteten Klassen
287
6.5.1 Virtuelle Funktionen
288
6.5.2 Abstrakte Klassen
293
6.5.3 Virtueller Destruktor
298
6.5.4 Private virtuelle Funktionen
302
6.6 Probleme der Modellierung mit Vererbung
303
6.7 Mehrfachvererbung
306
6.7.1 Namenskonflikte
309
6.7.2 Virtuelle Basisklassen
310
6.8 Standard-Typumwandlungsoperatoren
313
6.9 Typinformationen zur Laufzeit
316
6.10 Using-Deklaration für protected-Funktionen
318
6.11 Private- und Protected-Vererbung
318
7 Fehlerbehandlung
322
7.1 Ausnahmebehandlung
324
7.1.1 Exception-Spezifikation in Deklarationen
327
7.1.2 Exception-Hierarchie in C++
328
7.1.3 Besondere Fehlerbehandlungsfunktionen
329
7.1.4 Erkennen logischer Fehler
331
7.1.5 Arithmetische Fehler / Division durch 0
333
7.2 Speicherbeschaffung mit new
334
7.3 Exception-Sicherheit
336
8 Überladen von Operatoren
338
8.1 Rationale Zahlen — noch einmal
340
8.1.1 Arithmetische Operatoren
340
8.1.2 Ausgabeoperator <<
342
8.2 Eine Klasse für Vektoren
344
8.2.1 Index-Operator [ ]
347
8.2.2 Zuweisungsoperator =
350
8.2.3 Mathematische Vektoren
352
8.2.4 Multiplikationsoperator
353
8.3 Inkrement-Operator ++
355
8.4 Typumwandlungsoperator
359
8.5 Smart Pointer: Operatoren -> und *
360
8.5.1 Smart Pointer und die C++-Standardbibliothek
365
8.6 Objekt als Funktion
365
8.7 new und delete überladen
367
8.7.1 Speichermanagement mit malloc und free
370
8.7.2 Unterscheidung zwischen Heap- und Stack-Objekten
372
8.7.3 Fehlende delete-Anweisung entdecken
374
8.7.4 Eigene Speicherverwaltung für einen bestimmten Typ
375
8.7.5 Empfehlungen im Umgang mit new und delete
379
8.8 Operatoren für Literale
380
8.8.1 Stringliterale
380
8.8.2 Benutzerdefinierte Literale
381
8.9 Mehrdimensionale Matrizen
383
8.9.1 Zweidimensionale Matrix als Vektor von Vektoren
384
8.9.2 Dreidimensionale Matrix
387
8.10 Zuweisung bei Vererbung
389
9 Dateien und Ströme
400
9.1 Ausgabe
402
9.1.1 Formatierung der Ausgabe
402
9.2 Eingabe
405
9.3 Manipulatoren
408
9.3.1 Eigene Manipulatoren
413
9.4 Fehlerbehandlung
415
9.5 Typumwandlung von Dateiobjekten nach bool
416
9.6 Arbeit mit Dateien
417
9.6.1 Positionierung in Dateien
418
9.6.2 Lesen und Schreiben in derselben Datei
419
9.7 Umleitung auf Strings
420
9.8 Tabelle formatiert ausgeben
422
9.9 Formatierte Daten lesen
423
9.9.1 Eingabe benutzerdefinierter Typen
423
9.10 Blockweise lesen oder schreiben
424
9.11 Ergänzungen
427
10 Einführung in die Standard Template Library (STL)
428
10.1 Container, Iteratoren, Algorithmen
429
10.2 Iteratoren im Detail
434
10.3 Beispiel verkettete Liste
435
Teil II: Fortgeschrittene Themen
440
11 Lambda-Funktionen
442
11.1 Eigenschaften
443
11.1.1 Äquivalenz zum Funktionszeiger
444
11.1.2 Lambda-Funktion und Klasse
445
11.2 Generische Lambda-Funktionen
445
11.3 Parametererfassung mit []
447
12 Performance, Wert- und Referenzsemantik
448
12.1 Performanceproblem Wertsemantik
449
12.1.1 Auslassen der Kopie
450
12.1.2 Temporäre Objekte bei der Zuweisung
451
12.2 Referenzsemantik für R-Werte
452
12.3 Optimierung durch Referenzsemantik für R-Werte
454
12.3.1 Bewegender Konstruktor
457
12.3.2 Bewegender Zuweisungsoperator
457
12.4 Die move()-Funktion
458
12.4.1 Regel zur Template-Auswertung von &&-Parametern
460
12.5 Ein effizienter binärer Plusoperator
461
12.5.1 Return Value Optimization (RVO)
461
12.5.2 Kopien temporärer Objekte eliminieren
462
12.5.3 Verbesserung durch verzögerte Auswertung
463
13 Reguläre Ausdrücke
466
13.1 Elemente regulärer Ausdrücke
467
13.1.1 Greedy oder lazy?
469
13.2 Interaktive Auswertung
470
13.3 Auszug des regex-APIs
473
13.4 Anwendungen
475
14 Threads
476
14.1 Zeit und Dauer
477
14.2 Threads
478
14.3 Die Klasse thread
481
14.3.1 Thread-Group
484
14.4 Synchronisation
485
14.5 Thread-Steuerung: pausieren, fortsetzen, beenden
489
14.5.1 Data Race
493
14.6 Interrupt
494
14.7 Warten auf Ereignisse
496
14.8 Reader/Writer-Problem
501
14.8.1 Wenn Threads verhungern
506
14.8.2 Reader/Writer-Varianten
508
14.9 Thread-Sicherheit
508
15 Grafische Benutzungsschnittstellen
510
15.1 Ereignisgesteuerte Programmierung
511
15.2 GUI-Programmierung mit Qt
512
15.2.1 Installation und Einsatz
512
15.2.2 Meta-Objektsystem
513
15.2.3 Der Programmablauf
514
15.2.4 Ereignis abfragen
515
15.3 Signale, Slots und Widgets
516
15.4 Dialog
525
15.5 Qt oder Boost?
528
15.5.1 Threads
529
15.5.2 Verzeichnisbaum durchwandern
530
16 Internet-Anbindung
532
16.1 Protokolle
533
16.2 Adressen
533
16.3 Socket
537
16.3.1 Bidirektionale Kommunikation
540
16.3.2 UDP-Sockets
542
16.3.3 Atomuhr mit UDP abfragen
543
16.4 HTTP
546
16.4.1 Verbindung mit GET
547
16.4.2 Verbindung mit POST
552
16.5 Mini-Webserver
553
17 Datenbankanbindung
562
17.1 C++-Interface
563
17.2 Anwendungsbeispiel
567
Teil III: Praktische Methoden und Werkzeuge der Softwareentwicklung
574
18 Effiziente Programmerzeugung mit make
576
18.1 Quellen
577
18.2 Wirkungsweise
578
18.3 Variablen und Muster
580
18.4 Universelles Makefile für einfache Projekte
581
18.5 Automatische Ermittlung von Abhängigkeiten
582
18.5.1 Getrennte Verzeichnisse: src, obj, bin
584
18.6 Makefile für Verzeichnisbäume
586
18.6.1 Rekursive Make-Aufrufe
587
18.6.2 Ein Makefile für alles
589
18.7 Automatische Erzeugung von Makefiles
590
18.7.1 Makefile für rekursive Aufrufe erzeugen
591
18.8 Erzeugen von Bibliotheken
592
18.8.1 Statische Bibliotheksmodule
592
18.8.2 Dynamische Bibliotheksmodule
594
18.9 GNU Autotools
597
18.10 CMake
600
18.11 Code Bloat bei der Instanziierung von Templates vermeiden
600
18.11.1 extern-Template
601
18.11.2 Aufspaltung in Schnittstelle und Implementation
603
19 Unit-Test
604
19.1 Werkzeuge
605
19.2 Test Driven Development
606
19.3 Boost Unit Test Framework
607
19.3.1 Beispiel: Testgetriebene Entwicklung einer Operatorfunktion
609
19.3.2 Fixture
613
19.3.3 Testprotokoll und Log-Level
613
19.3.4 Prüf-Makros
615
19.3.5 Kommandozeilen-Optionen
618
20 Werkzeuge zur Verwaltung von Projekten
620
20.1 Dokumentation und Strukturanalyse mit doxygen
620
20.1.1 Strukturanalyse
624
20.2 Versionskontrolle
625
20.2.1 Subversion
625
20.2.2 Git
627
20.3 Projektverwaltung
627
Teil IV: Das C++-Rezeptbuch: Tipps und Lösungen für typische Aufgaben
630
21 Sichere Programmentwicklung
632
21.1 Regeln zum Design von Methoden
632
21.2 Defensive Programmierung
635
21.2.1 double- und float-Werte richtig vergleichen
636
21.2.2 const und constexpr verwenden
636
21.2.3 Anweisungen nach for/if/while einklammern
636
21.2.4 int und unsigned/size_t nicht mischen
637
21.2.5 size_t oder auto statt unsigned int verwenden
637
21.2.6 Postfix++ mit Präfix++ implementieren
638
21.2.7 Ein Destruktor darf keine Exception werfen
638
21.2.8 explicit-Typumwandlungsoperator bevorzugen
639
21.2.9 explicit-Konstruktor für eine Typumwandlung bevorzugen
639
21.2.10 Leere Standardkonstruktoren vermeiden
639
21.2.11 Mit override Schreibfehler reduzieren
639
21.2.12 Kopieren und Zuweisung verbieten
640
21.2.13 Vererbung verbieten
641
21.2.14 Überschreiben einer virtuellen Methode verhindern
641
21.2.15 The Big Three – oder Big Five?
642
21.2.16 One Definition Rule
643
21.2.17 Defensiv Objekte löschen
643
21.2.18 Speicherbeschaffung und -freigabe kapseln
643
21.2.19 Programmierrichtlinien einhalten
643
21.3 Exception-sichere Beschaffung von Ressourcen
643
21.3.1 Sichere Verwendung von unique_ptr und shared_ptr
644
21.3.2 So vermeiden Sie new und delete!
644
21.3.3 So vermeiden Sie new[] und delete[]!
645
21.3.4 shared_ptr für Arrays korrekt verwenden
645
21.3.5 unique_ptr für Arrays korrekt verwenden
646
21.3.6 Exception-sichere Funktion
646
21.3.7 Exception-sicherer Konstruktor
647
21.3.8 Exception-sichere Zuweisung
650
21.4 Empfehlungen zur Thread-Programmierung
651
21.4.1 Warten auf die Freigabe von Ressourcen
651
21.4.2 Deadlock-Vermeidung
652
21.4.3 notify_all oder notify_one?
652
21.4.4 Performance mit Threads verbessern?
653
22 Von der UML nach C++
654
22.1 Vererbung
654
22.2 Interface anbieten und nutzen
655
22.3 Assoziation
656
22.3.1 Aggregation
660
22.3.2 Komposition
660
23 Algorithmen für verschiedene Aufgaben
662
23.1 Algorithmen mit Strings
662
23.1.1 String splitten
663
23.1.2 String in Zahl umwandeln
664
23.1.3 Zahl in String umwandeln
668
23.1.4 Strings sprachlich richtig sortieren
668
23.1.5 Umwandlung in Klein- bzw. Großschreibung
670
23.1.6 Strings sprachlich richtig vergleichen
672
23.1.7 Von der Groß-/Kleinschreibung unabhängiger Zeichenvergleich
673
23.1.8 Von der Groß-/Kleinschreibung unabhängige Suche
674
23.2 Textverarbeitung
676
23.2.1 Datei durchsuchen
676
23.2.2 Ersetzungen in einer Datei
677
23.2.3 Code-Formatierer
679
23.2.4 Lines of Code (LOC) ermitteln
680
23.2.5 Zeilen, Wörter und Zeichen einer Datei zählen
682
23.2.6 CSV-Datei lesen
682
23.2.7 Kreuzreferenzliste
684
23.3 Operationen auf Folgen
687
23.3.1 Container anzeigen
687
23.3.2 Folge mit gleichen Werten initialisieren
687
23.3.3 Folge mit Werten eines Generators initialisieren
688
23.3.4 Folge mit fortlaufenden Werten initialisieren
688
23.3.5 Summe und Produkt
689
23.3.6 Mittelwert und Standardabweichung
690
23.3.7 Skalarprodukt
690
23.3.8 Folge der Teilsummen oder -produkte
691
23.3.9 Folge der Differenzen
692
23.3.10 Kleinstes und größtes Element finden
693
23.3.11 Elemente rotieren
695
23.3.12 Elemente verwürfeln
696
23.3.13 Dubletten entfernen
697
23.3.14 Reihenfolge umdrehen
699
23.3.15 Anzahl der Elemente, die einer Bedingung genügen
700
23.3.16 Gilt X für alle, keins oder wenigstens ein Element einer Folge?
701
23.3.17 Permutationen
702
23.3.18 Lexikografischer Vergleich
704
23.4 Sortieren und Verwandtes
705
23.4.1 Partitionieren
706
23.4.2 Sortieren
708
23.4.3 Stabiles Sortieren
709
23.4.4 Partielles Sortieren
710
23.4.5 Das n.-größte oder n.-kleinste Element finden
711
23.4.6 Verschmelzen (merge)
712
23.5 Suchen und Finden
715
23.5.1 Element finden
715
23.5.2 Element einer Menge in der Folge finden
716
23.5.3 Teilfolge finden
717
23.5.4 Bestimmte benachbarte Elemente finden
719
23.5.5 Bestimmte aufeinanderfolgende Werte finden
720
23.5.6 Binäre Suche
721
23.6 Mengenoperationen auf sortierten Strukturen
724
23.6.1 Teilmengenrelation
724
23.6.2 Vereinigung
725
23.6.3 Schnittmenge
726
23.6.4 Differenz
726
23.6.5 Symmetrische Differenz
727
23.7 Heap-Algorithmen
727
23.7.1 pop_heap
729
23.7.2 push_heap
730
23.7.3 make_heap
730
23.7.4 sort_heap
731
23.7.5 is_heap
731
23.8 Vergleich von Containern auch ungleichen Typs
732
23.8.1 Unterschiedliche Elemente finden
732
23.8.2 Prüfung auf gleiche Inhalte
734
23.9 Rechnen mit komplexen Zahlen: Der C++-Standardtyp complex
735
23.10 Schnelle zweidimensionale Matrix
737
23.10.1 Optimierung mathematischer Array-Operationen
740
23.11 Singleton
743
23.11.1 Implementierung mit einem Zeiger
743
23.11.2 Implementierung mit einer Referenz
744
23.11.3 Meyers' Singleton
745
23.12 Vermischtes
747
23.12.1 Erkennung eines Datums
747
23.12.2 Erkennung einer IP4-Adresse
749
23.12.3 Erzeugen von Zufallszahlen
750
23.12.4 for_each — Auf jedem Element eine Funktion ausführen
755
23.12.5 Verschiedene Möglichkeiten, Container-Bereiche zu kopieren
755
23.12.6 Vertauschen von Elementen, Bereichen und Containern
758
23.12.7 Elemente transformieren
758
23.12.8 Ersetzen und Varianten
760
23.12.9 Elemente herausfiltern
761
23.12.10 Grenzwerte von Zahltypen
763
23.12.11 Minimum und Maximum
763
24 Datei- und Verzeichnisoperationen
766
24.1 Datei oder Verzeichnis löschen
767
24.2 Datei oder Verzeichnis umbenennen
768
24.3 Verzeichnis anlegen
769
24.4 Verzeichnis anzeigen
770
24.5 Verzeichnisbaum anzeigen
771
Teil V: Die C++-Standardbibliothek
774
25 Aufbau und Übersicht
776
25.1 Auslassungen
778
25.2 Beispiele des Buchs und die C++-Standardbibliothek
780
26 Hilfsfunktionen und -klassen
782
26.1 Relationale Operatoren
782
26.2 Unterstützung der Referenzsemantik für R-Werte
783
26.2.1 move()
783
26.2.2 forward()
784
26.3 Paare
785
26.4 Tupel
787
26.5 Indexfolgen
789
26.6 Funktionsobjekte
790
26.6.1 Arithmetische, vergleichende und logische Operationen
790
26.6.2 Funktionsobjekte zum Negieren logischer Prädikate
791
26.6.3 Binden von Argumentwerten
792
26.6.4 Funktionen in Objekte umwandeln
793
26.7 Templates für rationale Zahlen
795
26.8 Hüllklasse für Referenzen
797
26.9 Type Traits
798
26.9.1 Wie funktionieren Type Traits? — ein Beispiel
799
26.9.2 Abfrage von Eigenschaften
801
26.9.3 Abfrage numerischer Eigenschaften
803
26.9.4 Typbeziehungen
803
26.9.5 Typumwandlungen
803
26.9.6 Auswahl weiterer Transformationen
804
27 Container
806
27.1 Gemeinsame Eigenschaften
808
27.1.1 Initialisierungslisten
810
27.1.2 Konstruktion an Ort und Stelle
810
27.1.3 Reversible Container
811
27.2 Sequenzen
812
27.2.1 vector
813
27.2.2 vector
814
27.2.3 list
815
27.2.4 deque
818
27.2.5 stack
819
27.2.6 queue
821
27.2.7 priority_queue
822
27.2.8 array
824
27.3 Sortierte assoziative Container
827
27.3.1 map
827
27.3.2 multimap
832
27.3.3 set
832
27.3.4 multiset
836
27.4 Hash-Container
836
27.4.1 unordered_map
838
27.4.2 unordered_multimap
843
27.4.3 unordered_set
844
27.4.4 unordered_multiset
846
27.5 bitset
847
28 Iteratoren
850
28.1 Iterator-Kategorien
851
28.1.1 Anwendung von Traits
853
28.2 distance() und advance()
855
28.3 Bereichszugriff
856
28.3.1 Reverse-Iteratoren
857
28.4 Insert-Iteratoren
858
28.5 Stream-Iteratoren
859
29 Algorithmen
862
29.1 Algorithmen mit Prädikat
863
29.1.1 Algorithmen mit binärem Prädikat
863
29.2 Übersicht
864
30 Nationale Besonderheiten
868
30.1 Sprachumgebungen festlegen und ändern
868
30.1.1 Die locale-Funktionen
871
30.2 Zeichensätze und -codierung
872
30.3 Zeichenklassifizierung und -umwandlung
876
30.4 Kategorien
876
30.4.1 collate
877
30.4.2 ctype
878
30.4.3 numeric
879
30.4.4 monetary
881
30.4.5 time
884
30.4.6 messages
886
30.5 Konstruktion eigener Facetten
887
31 String
890
32 Speichermanagement
900
32.1 unique_ptr
900
32.1.1 make_unique
902
32.2 shared_ptr
903
32.2.1 make_shared
904
32.2.2 Typumwandlung in einen Oberklassentyp
904
32.3 weak_ptr
905
32.4 new mit Speicherortangabe
906
33 Numerische Arrays (valarray)
908
33.1 Konstruktoren
909
33.2 Elementfunktionen
909
33.3 Binäre Valarray-Operatoren
912
33.4 Mathematische Funktionen
914
33.5 slice und slice_array
915
33.6 gslice und gslice_array
918
33.7 mask_array
920
33.8 indirect_array
922
34 Ausgewählte C-Header
924
34.1
925
34.2
925
34.3
926
34.4
926
34.5
927
34.6
928
34.7
928
34.8
928
34.9
930
34.10
932
A Anhang
934
A.1 ASCII-Tabelle
934
A.2 C++-Schlüsselwörter
936
A.3 Compilerbefehle
937
A.4 Rangfolge der Operatoren
938
A.5 Lösungen zu den Übungsaufgaben
939
A.6 Installation der Software für Windows
949
A.6.1 Installation des Compilers und der Entwicklungsumgebung
949
A.6.2 Integrierte Entwicklungsumgebung einrichten
950
A.6.3 De-Installation
951
A.7 Installation der Software für Linux
952
A.7.1 Installation des Compilers
952
A.7.2 Installation von Boost
953
A.7.3 Installation und Einrichtung von Code::Blocks
953
A.7.4 Beispieldateien entpacken
954
Glossar
956
Literaturverzeichnis
966
Register
970
© 2009-2024 ciando GmbH