Dirk Louis
C++
Das komplette Starterkit für den einfachen Einstieg in die Programmierung
Inhalt
7
Vorwort
17
Teil I: Grundkurs
19
1 Keine Angst vor C++!
21
1.1 Von C zu C++
22
1.1.1 Rückblick
22
1.1.2 Die strukturierte Programmierung
24
1.1.3 Chips sind billig, Programmierer teuer
26
1.1.4 Fassen wir zusammen
27
1.2 Von der Idee zum fertigen Programm
28
1.3 Näher hingeschaut: der C++-Compiler
30
1.3.1 Der Compiler ist ein strenger Lehrer
30
1.3.2 Definition und Deklaration
31
1.3.3 Das Konzept der Headerdateien
33
1.3.4 Namensräume
34
1.3.5 Der Compiler bei der Arbeit
36
1.3.6 ISO und die Compiler-Wahl
37
1.3.7 Der neue C++17-Standard
37
1.4 Übungen
38
2 Grundkurs: Das erste Programm
39
2.1 Hallo Welt! – das Programmgerüst
39
2.1.1 Typischer Programmaufbau
40
2.1.2 Die Eintrittsfunktion main()
41
2.1.3 Die Anweisungen
42
2.1.4 Headerdateien
44
2.1.5 Kommentare
45
2.2 Programmerstellung
46
2.2.1 Programmerstellung mit Visual Studio
46
2.2.2 Programmerstellung mit GNU-Compiler
53
2.2.3 Programmausführung
54
2.3 Stil
56
2.4 Übungen
57
3 Grundkurs: Daten und Variablen
59
3.1 Konstanten (Literale)
59
3.2 Variablen
62
3.2.1 Variablendefinition
62
3.2.2 Werte in Variablen speichern
65
3.2.3 Variablen bei der Definition initialisieren
66
3.2.4 Werte von Variablen abfragen
67
3.3 Konstante Variablen
68
3.4 Die Datentypen
69
3.4.1 Die Bedeutung des Datentyps
69
3.4.2 Die elementaren Datentypen
73
3.4.3 Weitere Datentypen
75
3.5 Typumwandlung
75
3.5.1 Typumwandlung bei der Ein- und Ausgabe
75
3.5.2 Automatische Typumwandlungen
78
3.5.3 Explizite Typumwandlungen
79
3.6 Übungen
80
4 Grundkurs: Operatoren und Ausdrücke
83
4.1 Rechenoperationen
83
4.1.1 Die arithmetischen Operatoren
83
4.1.2 Die mathematischen Funktionen
86
4.2 Ausdrücke
87
4.3 Die kombinierten Zuweisungen
89
4.4 Inkrement und Dekrement
89
4.5 Strings addieren
91
4.6 Weitere Operatoren
92
4.7 Übungen
92
5 Grundkurs: Kontrollstrukturen
93
5.1 Entscheidungen und Bedingungen
93
5.1.1 Bedingungen
94
5.1.2 Die Vergleichsoperatoren
95
5.1.3 Die logischen Operatoren
96
5.2 Verzweigungen
98
5.2.1 Die einfache if-Anweisung
98
5.2.2 Die if-else-Verzweigung
100
5.2.3 Die switch-Verzweigung
103
5.3 Schleifen
107
5.3.1 Die while-Schleife
107
5.3.2 Die do-while-Schleife
111
5.3.3 Die for-Schleife
113
5.3.4 Schleifen mit mehreren Schleifenvariablen
114
5.3.5 Performance-Tipps
115
5.4 Sprunganweisungen
115
5.4.1 Abbruchbefehle für Schleife
117
5.4.2 Abbruchbefehle für Funktionen
120
5.4.3 Sprünge mit goto
120
5.5 Fallstricke
120
5.5.1 Die leere Anweisung
120
5.5.2 Nebeneffekte in booleschen Ausdrücken
121
5.5.3 Dangling else-Problem
122
5.5.4 Endlosschleifen
123
5.6 Übungen
124
6 Grundkurs: Eigene Funktionen
127
6.1 Definition und Aufruf
128
6.1.1 Der Ort der Funktionsdefinition
129
6.1.2 Funktionsprototypen (Deklaration)
130
6.2 Rückgabewerte und Parameter
131
6.2.1 Rückgabewerte
133
6.2.2 Parameter
135
6.3 Lokale und globale Variablen
140
6.3.1 Lokale Variablen
140
6.3.2 Globale Variablen
141
6.3.3 Gültigkeitsbereiche und Verdeckung
142
6.4 Funktionen und der Stack
144
6.5 Überladung
146
6.6 Übungen
148
7 Grundkurs: Eigene Datentypen
149
7.1 Arrays
149
7.1.1 Definition
149
7.1.2 Auf Array-Elemente zugreifen
151
7.1.3 Initialisierung
151
7.1.4 Arrays in Schleifen durchlaufen
152
7.1.5 Arrays an Funktionen übergeben
155
7.1.6 Mehrdimensionale Arrays
155
7.1.7 Vor- und Nachteile der Programmierung mit Arrays
156
7.2 Aufzählungen
156
7.2.1 Definition
159
7.2.2 Variablen
159
7.2.3 Aufzählungstypen und switch-Verzweigungen
160
7.2.4 Die neuen enum class-Aufzählungen
160
7.3 Strukturen
161
7.3.1 Definition
162
7.3.2 Variablendefinition
163
7.3.3 Zugriff auf Elemente
164
7.3.4 Initialisierung
164
7.3.5 Arrays von Strukturen
164
7.4 Klassen
166
7.4.1 Definition
166
7.4.2 Variablen, Objekte und Konstruktoren
166
7.4.3 Zugriffsschutz
167
7.5 Übungen
170
8 Grundkurs: Zeiger und Referenzen
171
8.1 Zeiger
171
8.1.1 Definition
172
8.1.2 Initialisierung
172
8.1.3 Dereferenzierung
174
8.1.4 Zeigerarithmetik
176
8.2 Referenzen
177
8.3 Einsatzgebiete
177
8.3.1 call by reference
178
8.3.2 Dynamische Speicherreservierung
183
8.4 Übungen
189
9 Grundkurs: Noch ein paar Tipps
191
9.1 Wie gehe ich neue Programme an?
191
9.2 Wo finde ich Hilfe?
192
9.2.1 Hilfe zu Compiler-Meldungen
192
9.2.2 Hilfe bei der Lösung von Programmieraufgaben
193
9.2.3 Hilfe bei Programmen, die nicht richtig funktionieren
197
9.2.4 Debuggen
197
9.3 Programme optimieren
199
Teil II – Aufbaukurs: die Standardbibliothek
201
10 Aufbaukurs: Einführung
203
10.1 Bibliotheken verwenden
203
10.2 Hilfe zu den Bibliothekselementen
204
11 Aufbaukurs: Mathematische Funktionen
207
11.1 Die mathematischen Funktionen
207
11.1.1 Mathematische Konstanten
209
11.1.2 Verwendung der trigonometrischen Funktionen
210
11.1.3 Überläufe
210
11.2 Zufallszahlen
211
11.3 Komplexe Zahlen
213
11.4 Übungen
214
12 Aufbaukurs: Strings
215
12.1 String-Literale
215
12.1.1 Escape-Sequenzen
216
12.1.2 Zeilenumbrüche
218
12.2 Strings erzeugen
219
12.3 Strings aneinanderhängen
220
12.4 Strings vergleichen
220
12.5 Sonstige String-Manipulationen
223
12.6 C-Strings
224
12.7 Umwandlungen zwischen Strings und Zahlen
224
12.8 Übungen
225
13 Aufbaukurs: Ein- und Ausgabe
227
13.1 Daten auf die Konsole ausgeben
227
13.2 Formatierte Ausgabe
228
13.2.1 Ausgabebreite
228
13.2.2 Füllzeichen
229
13.2.3 Genauigkeit
229
13.2.4 Formatierte Ausgabe mit printf()
230
13.3 Deutsche Umlaute
231
13.4 Daten über die Konsole (Tastatur) einlesen
234
13.5 Fehlerbehandlung
235
13.6 Streams
237
13.7 Textdateien
238
13.7.1 In Textdateien schreiben
239
13.7.2 Aus Textdateien lesen
241
13.8 Binärdateien
244
13.9 Übungen
246
14 Aufbaukurs: Zeit und Datum
247
14.1 Zeit und Datum
247
14.2 Laufzeitmessungen
253
14.3 Übungen
255
15 Aufbaukurs: Container
257
15.1 Die STL
257
15.2 vector – ein intelligenter Daten-Container
260
15.2.1 Einsatz eines Containers
261
15.2.2 Größenmanagement von Containern
262
15.2.3 Typische Memberfunktionen
263
15.3 Der Gebrauch von Iteratoren
264
15.4 Die Algorithmen
267
15.4.1 generate()
270
15.4.2 stable_sort()
271
15.5 Schlüssel/Wert-Paare
272
15.6 Übungen
274
16 Aufbaukurs: Programme aus mehreren Quelltextdateien
275
16.1 Quelltext verteilen
275
16.1.1 Funktionen über Dateigrenzen hinweg verwenden
276
16.1.2 Klassen über Dateigrenzen hinweg verwenden
276
16.1.3 Variablen über Dateigrenzen hinweg verwenden
277
16.1.4 Typdefinitionen über Dateigrenzen hinweg verwenden
278
16.2 Mehrfacheinkopieren von Headerdateien verhindern
279
16.3 Übungen
281
Teil III – Objektorientierte Programmierung
283
17 OOP-Kurs: Klassen
285
17.1 Objektorientiert denken – objektorientiert programmieren
285
17.1.1 Objektorientiertes Programmieren
285
17.1.2 Wie sind Objekte beschaffen?
286
17.1.3 Wie findet man einen objektorientierten Lösungsansatz?
288
17.1.4 Objekte und Klassen
289
17.2 Klassendefinition
292
17.2.1 Zugriffsrechte
293
17.2.2 Quelltext- und Headerdatei
295
17.2.3 Klassen zu Visual-Studio-Projekten hinzufügen
298
17.3 Membervariablen
301
17.3.1 Anfangswerte
302
17.3.2 Private-Deklaration
306
17.3.3 Eingebettete Objekte
308
17.3.4 Konstante Membervariablen
310
17.3.5 Statische Membervariablen
311
17.4 Memberfunktionen
312
17.4.1 Definition innerhalb der Klassendefinition
312
17.4.2 Definition außerhalb der Klassendefinition
313
17.4.3 Der this-Zeiger
314
17.4.4 Statische Memberfunktionen
315
17.4.5 Konstante Memberfunktionen
316
17.4.6 Get-/Set-Memberfunktionen
317
17.5 Die Konstruktoren
320
17.5.1 Definition und Aufruf
320
17.5.2 Ersatz- und Standardkonstruktoren
322
17.6 Der Destruktor
325
17.7 Übungen
326
18 OOP-Kurs: Vererbung
329
18.1 Das Prinzip der Vererbung
329
18.1.1 Der grundlegende Mechanismus
330
18.1.2 Die Syntax
331
18.1.3 Wann ist Vererbung gerechtfertigt?
332
18.1.4 Einige wichtige Fakten
333
18.2 Das Basisklassenunterobjekt
334
18.2.1 Zugriff
335
18.2.2 Instanzbildung
338
18.3 Die Zugriffsspezifizierer für die Vererbung
340
18.4 Verdecken, überschreiben und überladen
341
18.4.1 Verdeckung
342
18.4.2 Überladung
342
18.4.3 Überschreibung
343
18.5 Der Destruktor
343
18.6 Mehrfachvererbung
344
18.7 Übungen
344
19 OOP-Kurs: Polymorphie
347
19.1 Grundprinzip und Implementierung
348
19.2 Späte und frühe Bindung
351
19.2.1 Frühe Bindung
351
19.2.2 Späte Bindung
352
19.3 Generische Programmierung
353
19.3.1 Basisklassen-Arrays
354
19.3.2 Basisklassenparameter
356
19.4 Typidentifizierung zur Laufzeit (RTTI)
357
19.4.1 Umwandlung mit dynamic_cast
357
19.4.2 Der typeid()-Operator
359
19.5 Abstrakte Klassen
359
19.5.1 Rein virtuelle Funktionen
360
19.5.2 Abstrakte Klassen
360
19.6 Übungen
361
20 OOP-Kurs: Ausnahmebehandlung
363
20.1 Fehlerprüfung mit Ausnahmen
364
20.2 Ausnahmen abfangen
366
20.3 Ausnahmen auslösen
369
20.4 Programmfluss und Ausnahmebehandlung
371
20.4.1 Wo wird der Programmfluss nach einer Ausnahme fortgesetzt?
372
20.4.2 Die Problematik des gestörten Programmflusses
372
20.5 Übungen
374
Teil IV – Profikurs
375
21 Profikurs: Allgemeine Techniken
377
21.1 Vorzeichen und Überlauf
377
21.2 Arithmetische Konvertierungen
379
21.3 Lokale static-Variablen
379
21.4 Der ?:-Operator
380
21.5 Bit-Operatoren
380
21.5.1 Multiplikation mit 2
381
21.5.2 Division durch 2
382
21.5.3 Klein- und Großschreibung
382
21.5.4 Flags umschalten
383
21.5.5 Gerade Zahlen erkennen
383
21.6 Zeiger auf Funktionen
385
21.7 Rekursion
387
21.8 constexpr-Funktionen
389
21.9 Variablendefinition in if und switch
390
22 Profikurs: Objektorientierte Techniken
393
22.1 Zeiger auf Memberfunktionen
393
22.2 Friends
395
22.3 Überladung von Operatoren
396
22.3.1 Syntax
396
22.3.2 Überladung des Inkrement-Operators ++
397
22.3.3 Überladung arithmetischer Operatoren +, +=
398
22.3.4 Überladung der Streamoperatoren <<>>
399
22.4 Objekte vergleichen
400
22.4.1 Gleichheit
400
22.4.2 Größenvergleiche
402
22.5 Objekte kopieren
404
23 Profikurs: Gültigkeitsbereiche und Lebensdauer
409
24 Profikurs: Templates
413
24.1 Funktionen-Templates
414
24.2 Klassen-Templates
415
25 Profikurs: Reguläre Ausdrücke
419
25.1 Syntax regulärer Ausdrücke
419
25.1.1 Zeichen und Zeichenklassen
420
25.1.2 Quantifizierer
421
25.1.3 Gruppierung
422
25.1.4 Assertionen (Anker)
423
25.2 Musterabgleich mit regulären Ausdrücken
423
25.3 Suchen mit regulären Ausdrücken
424
25.4 Ersetzen mit regulären Ausdrücken
425
26 Profikurs: Lambda-Ausdrücke
427
26.1 Syntax
427
26.2 Einsatz
429
A Anhang A: Lösungen
431
B Anhang B: Die Beispiele zum Buch
451
B.1 Installation der Visual Studio Community Edition
451
B.2 Ausführung der Beispielprogramme
454
B.2.1 Ausführung mit VS Community Edition 2017
455
B.2.2 Ausführung mit beliebigen integrierten Entwicklungsumgebungen
456
B.2.3 Ausführung mit GNU-Konsolen-Compiler
457
C Anhang C: Zeichensätze
459
C.1 Der ASCII-Zeichensatz
459
C.2 Der ANSI-Zeichensatz
460
D Anhang D: Syntaxreferenz
463
D.1 Schlüsselwörter
463
D.2 Elementare Typen
464
D.3 Strings
465
D.4 Operatoren
466
D.5 Ablaufsteuerung
467
D.6 Ausnahmebehandlung
469
D.7 Aufzählungen
469
D.7.1 enum
469
D.7.2 enum class (C++11)
470
D.8 Arrays
470
D.9 Zeiger
471
D.10 Strukturen
471
D.11 Klassen
472
D.12 Vererbung
475
D.13 Namensräume
475
E Anhang E: Die Standardbibliothek
477
E.1 Die C-Standardbibliothek
477
E.2 Die C++-Standardbibliothek
478
Index
481
Leere Seite
2
© 2009-2024 ciando GmbH