Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Materialien zum Buch
17
1 Eine erste Einführung
19
1.1 Was machen wir mit C++?
19
1.2 Was benötige ich zum Programmieren?
20
1.3 Die Entwicklung von C++
20
1.4 So sieht das erste Programm aus
21
1.5 Kommentieren Sie Ihre Programme
22
2 Arbeiten mit Zahlen und Operatoren
25
2.1 Wie speichere ich Zahlen?
25
2.2 Rechnen mit Operatoren
27
2.3 Fehler suchen
29
2.4 Wie können Daten eingegeben werden?
31
2.5 Zahlen formatieren mit Manipulatoren
33
2.6 Zuweisungen kürzer schreiben
34
2.7 Übung
36
2.8 Mehr über die Speicherung von Zahlen
37
2.8.1 Ganzzahlige Datentypen
37
2.8.2 Datentypen für Fließkommazahlen
40
2.9 Feste Werte in Konstanten speichern
41
2.10 Konstanten in Enumerationen zusammenfassen
42
2.11 Zahlensysteme
43
2.12 Initialisierung
45
2.13 Wie erzeuge ich zufällige Zahlen?
47
2.14 Übung
48
3 Mehrere Zweige in einem Programm
49
3.1 Zwei Zweige mit »if« und »else«
49
3.2 Bedingungen benötigen Vergleiche
51
3.3 Mehr als zwei Zweige
53
3.4 Wie kann ich Bedingungen kombinieren?
55
3.5 Zweige zusammenfassen mit »switch« und »case«
57
3.6 Was ist mit dem Rest?
58
3.7 Welcher Operator hat Vorrang?
59
3.8 Übungen
60
3.9 Wie speichere ich Wahrheitswerte?
63
3.10 Die Kurzform: der bedingte Ausdruck
65
4 Teile von Programmen wiederholen
67
4.1 Regelmäßige Wiederholungen mit »for«
67
4.2 Wiederholungen für einen Bereich
70
4.3 Bedingte Wiederholungen mit »do-while«
71
4.4 Besser vorher prüfen mit »while«
72
4.5 Wiederholungen abbrechen oder fortsetzen
73
4.6 Die Wiederholung der Wiederholung
75
4.7 Übungen
76
5 Programme aufteilen in Funktionen
79
5.1 So schreibe ich eine eigene Funktion
79
5.2 Wie übergebe ich Daten?
81
5.2.1 Ein weiterer Zugriff über eine Referenz
83
5.2.2 Übergabe an eine Referenz
84
5.2.3 Übergabe an eine konstante Referenz
86
5.3 Wie erhalte ich ein Ergebnis zurück?
87
5.4 Mehr Ordnung im Programm
88
5.5 Statische Variablen behalten ihren Wert
90
5.6 Fehler suchen
91
5.7 Übungen
92
5.8 Standardwerte vorgeben
93
5.9 Beliebig viele Parameter
94
5.10 Funktionen mehrfach definieren
96
5.11 Funktionen, die sich selbst aufrufen
98
5.12 Anonyme Funktionen
99
5.12.1 So schreibe ich eine anonyme Funktion
100
5.12.2 Daten von außerhalb erfassen
101
5.12.3 Wie übergebe ich Parameter?
102
5.12.4 Wie erhalte ich ein Ergebnis zurück?
104
5.13 Funktionen als Parameter
105
6 Große Datenmengen speichern in Feldern
109
6.1 Wie werden Felder unterschieden?
109
6.2 Einfache Felder mit fester Größe
110
6.3 Intelligente Felder mit fester Größe
111
6.4 Ausnahmen behandeln
113
6.5 Einfache und intelligente Zeiger
115
6.5.1 Einfache Zeiger
116
6.5.2 Die Operatoren »new« und »delete«
118
6.5.3 Ein intelligenter und eindeutiger Zeiger
119
6.5.4 Das Funktionstemplate »make_unique«
120
6.5.5 Weitere intelligente Zeiger
121
6.6 Intelligente Felder mit variabler Größe
122
6.7 Felder initialisieren
124
6.8 Felder als Parameter
125
6.9 Daten in mehreren Dimensionen speichern
127
6.9.1 Ein zweidimensionales Feld mit fester Größe
127
6.9.2 Ein zweidimensionales Feld mit variabler Größe
129
6.10 Übungen
131
7 Arbeiten mit Zeichen und Texten
133
7.1 Einzelne Zeichen
133
7.2 Einfache Zeichenketten
134
7.3 Intelligente Zeichenketten: Strings
137
7.3.1 Strings erzeugen
137
7.3.2 Strings ändern
139
7.3.3 Strings vergleichen und durchsuchen
141
7.4 Wie wandle ich Zahlen in Strings um?
143
7.5 Wie verarbeite ich Eingaben?
144
7.6 Felder von Zeichenketten
147
7.7 Suchen und Ersetzen
149
7.7.1 Funktionen zum Suchen und Ersetzen
149
7.7.2 Beginn und Ende
151
7.7.3 Auswahl und Bereiche
152
7.7.4 Gruppen, Anzahl und Sonderzeichen
153
7.8 Übungen
154
8 Daten in Strukturen zusammenfassen
157
8.1 Wie speichere ich zusammengehörige Daten?
157
8.2 Besser einen Typ definieren
159
8.3 Strukturen und Felder
161
8.4 Strukturen und Funktionen
165
8.4.1 Das Hauptprogramm
166
8.4.2 Die Größe des Felds festlegen
167
8.4.3 Die Eingabefunktionen
168
8.4.4 Die Ausgabefunktionen
169
8.5 Eine Hierarchie von Strukturen
170
8.6 Übung
172
9 Vorhandene Funktionen nutzen
175
9.1 Umgang mit Datum und Uhrzeit
175
9.1.1 Datum und Uhrzeit ausgeben
176
9.1.2 Zeit messen
178
9.1.3 Zeitangaben erzeugen und berechnen
179
9.2 Bessere zufällige Zahlen
181
9.2.1 Mersenne-Twister
181
9.2.2 Binomialverteilung
182
9.2.3 Übung
184
9.3 Mehrere Threads zur gleichen Zeit
184
9.3.1 Ablauf von Threads
185
9.3.2 Parameter für Threads
187
9.3.3 Gemeinsame Daten
189
9.3.4 Gemeinsame Daten schützen
191
9.4 Nützliche mathematische Funktionen
193
9.4.1 Winkelfunktionen
193
9.4.2 Funktionen zum Runden
195
9.4.3 Verschiedene mathematische Funktionen
197
9.4.4 Prüffunktionen
198
9.4.5 Betrag und Vergleich
199
9.4.6 Numerische Funktionen
201
9.5 Übungen
202
9.6 Rechnen mit komplexen Zahlen
203
9.6.1 Erstellung von komplexen Zahlen
203
9.6.2 Spezielle Funktionen
205
9.6.3 Operatoren
207
9.6.4 Mathematische Funktionen
209
9.7 Daten mit dem Betriebssystem austauschen
210
9.7.1 Wie lauten die Parameter?
210
9.7.2 Berechnung der Summe der Parameter
212
9.7.3 Wie nutze ich die Rückgabe eines Programms?
213
9.7.4 Systemkommandos ausführen
215
9.7.5 Ausgabe umlenken
216
9.7.6 Eingabe umlenken
217
9.8 Zugriff auf Dateien und Verzeichnisse
219
9.8.1 Pfad-Objekte
220
9.8.2 Rechte für den Zugriff ermitteln
224
9.8.3 Rechte für den Zugriff ändern
226
9.8.4 Verzeichnisse und Verzeichnishierarchien
227
9.8.5 Dateien ändern
229
9.8.6 Verzeichnisse ändern
231
9.8.7 Verzeichnisse rekursiv ändern
233
10 Eigene Klassen entwerfen
237
10.1 Klassen umfassen Eigenschaften und Methoden
237
10.1.1 Die Definition der Klasse
238
10.1.2 Objekte als Instanzen einer Klasse
239
10.2 Schützen Sie die Daten
240
10.3 Wie erzeuge und lösche ich Objekte?
244
10.4 Statische Elemente einer Klasse
248
10.5 Wie überlade ich Operatoren?
252
10.6 Objekte und Felder
256
10.7 Objekte ausgeben
260
10.8 Eigenschaften können Objekte sein
262
10.9 Übungen
264
11 Vererbung und Polymorphie
269
11.1 Basisklasse und abgeleitete Klassen
269
11.2 Welche Elemente sind an welcher Stelle erreichbar?
276
11.3 Konstruktoren in abgeleiteten Klassen
277
11.4 Was bedeutet Polymorphie?
281
11.5 Erben von mehreren Klassen
284
12 Datenströme verarbeiten
289
12.1 Sequenzielles Schreiben und Lesen
289
12.1.1 Schreiben in eine Datei
290
12.1.2 Pfadangaben
292
12.1.3 Lesen aus einer Datei
292
12.1.4 Mehrmals öffnen und schließen
295
12.2 Schreiben und Lesen an beliebiger Stelle
296
12.2.1 Formatiertes Schreiben in eine Datei
297
12.2.2 Lesen an beliebiger Stelle einer Datei
299
12.2.3 Schreiben an beliebiger Stelle in eine Datei
302
12.3 Wie leiten Sie Datenströme?
305
12.3.1 String-Streams auf dem Bildschirm ausgeben
305
12.3.2 String-Streams von Tastatur lesen
306
12.4 Wie ist das CSV-Format zum Austausch aufgebaut?
308
12.4.1 Im CSV-Format in eine Datei schreiben
308
12.4.2 Eine Datei im CSV-Format lesen
312
12.5 Übung
315
13 Container sind vielfältige Datenstrukturen
319
13.1 Wie durchlaufe ich Container?
320
13.2 Intelligente Felder mit fester Größe
322
13.3 Intelligente Felder mit variabler Größe
326
13.4 Eine Warteschlange mit zwei Enden
330
13.5 Daten in Listen verketten
334
13.5.1 Einfach verkettete Listen
334
13.5.2 Doppelt verkettete Listen
339
13.6 Drei einfache Container
344
13.6.1 Stapel
345
13.6.2 Einfache Warteschlangen
347
13.6.3 Prioritäts-Warteschlangen
349
13.7 Zwei nützliche Typen
351
13.7.1 Paare
351
13.7.2 Tupel
353
13.8 Eine Menge von Elementen
355
13.8.1 Sortiert und einzigartig
355
13.8.2 Nicht sortiert und einzigartig
360
13.8.3 Sortiert und nicht einzigartig
360
13.8.4 Nicht sortiert und nicht einzigartig
361
13.9 Schlüssel und Werte in einer Map
362
13.9.1 Sortiert und einzigartig
362
13.9.2 Nicht sortiert und einzigartig
367
13.9.3 Sortiert und nicht einzigartig
368
13.9.4 Nicht sortiert und nicht einzigartig
369
13.10 Algorithmen für Bereiche
369
13.11 Mengenlehre
374
13.12 Eine Menge von Bits
378
13.12.1 Funktionen für Bitsets
378
13.12.2 Operatoren für Bitsets
380
14 Mehr zu eigenen Klassen
383
14.1 Objekte initialisieren, kopieren und erzeugen
383
14.2 Klassen können Freunde haben
386
14.2.1 Befreundete Funktionen
386
14.2.2 Befreundete Klassen
387
14.3 Namen müssen eindeutig sein
389
14.4 Fehler behandeln mit Ausnahmen
392
14.4.1 Ausnahmen in Schleifen
392
14.4.2 Eigene Ausnahmen werfen
393
14.4.3 Ausnahme in Funktion behandeln
395
14.4.4 Eigene Ausnahmeklasse definieren
397
14.5 Innere Klassen
400
14.6 Templates sind Vorlagen
402
14.6.1 Templates für Funktionen
402
14.6.2 Templates für Klassen
405
15 Präprozessor-Anweisungen
409
15.1 Einbinden von Dateien
409
15.2 Definitionen und Makros
410
15.3 Definitionen und Verzweigungen
412
15.4 Eine Systemweiche
414
16 Grafische Benutzeroberflächen mit der Qt-Bibliothek
417
16.1 Die erste GUI-Anwendung
418
16.1.1 Klasse und Dateien
418
16.1.2 Projekt- und Codefenster
420
16.1.3 »Design«-Ansicht
420
16.1.4 Projekt ausführen
421
16.1.5 Ein Label einfügen und gestalten
422
16.1.6 Weitere Widgets einfügen und gestalten
424
16.1.7 Code und Verbindung erstellen
424
16.1.8 Registerkarte »Signals und Slots«
428
16.2 Ein einfacher Kopfrechentrainer
429
16.2.1 Die Erstellung der GUI
430
16.2.2 Die Deklaration der Klasse
431
16.2.3 Die Definition ohne Prüfung
431
16.2.4 Die Definition mit Prüfung
433
16.3 Ein erweiterter Kopfrechentrainer
434
16.3.1 Ein Projekt kopieren
435
16.3.2 Die Erweiterung der GUI
436
16.3.3 Die Erweiterung der Deklaration
437
16.3.4 Die Erweiterung des Konstruktors
437
16.3.5 Die Erweiterung des Prüfvorgangs
438
16.3.6 Die Erweiterung der Aufgabenstellung
439
16.4 Weitere Widgets
441
16.4.1 Beschreibung der Widgets
441
16.4.2 Die Erstellung der GUI
442
16.4.3 Die Deklaration der Klasse
442
16.4.4 Der Konstruktor der Klasse
443
16.4.5 Die Ereignismethoden der Klasse
445
17 Datenbanken mit SQLite verwalten
449
17.1 Der Aufbau einer Datenbank
449
17.2 Wie erzeuge ich Datenbank und Tabelle?
450
17.2.1 Die Erstellung der GUI
450
17.2.2 Die Deklaration der Klasse
451
17.2.3 Konstruktor und Destruktor der Klasse
452
17.2.4 Die Ereignismethode der Klasse
454
17.3 Wie speichere ich Daten in einer Tabelle?
455
17.4 So zeige ich alle Daten einer Tabelle an
457
17.5 Wie wähle ich bestimmte Daten aus?
460
17.5.1 Vergleichsoperatoren
461
17.5.2 Logische Operatoren
462
17.5.3 Vergleichsoperator »LIKE«
462
17.6 Der Benutzer wählt Daten aus
464
17.7 Daten sollten sortiert werden
465
17.8 Wie ändere ich Daten?
466
17.9 Vorsicht beim Löschen von Daten
468
17.10 Eine Datenbank mit mehreren Tabellen
469
17.10.1 Inhalt der Datenbank
469
17.10.2 Das Datenbankmodell
470
17.10.3 Der Aufbau des Qt-Projekts
472
17.10.4 Das Erstellen und Füllen der Tabellen
472
17.10.5 Abfragen über einzelne Tabellen
473
17.10.6 Abfragen über zwei verbundene Tabellen
474
17.10.7 Abfragen über drei verbundene Tabellen
475
17.10.8 Gruppieren und Summieren
476
17.11 Projekt Vokabeln
476
17.11.1 Die Benutzung des Programms
477
17.11.2 Der Aufbau des Qt-Projekts
481
17.11.3 Die Deklaration der Klasse
482
17.11.4 Der Konstruktor der Klasse
484
17.11.5 Das Aktivieren und Deaktivieren von Widgets
486
17.11.6 Die Auswahl der Sprachkombination
487
17.11.7 Der Vokabeltest wird gestartet
489
17.11.8 Die Übersetzung wird geprüft
491
17.11.9 Der Vokabeltest wird vorzeitig beendet
492
17.11.10 Die Neueingabe von Vokabeln wird gestartet
492
17.11.11 Die List Widgets werden parallel markiert
494
17.11.12 Eine neue Vokabel wird gespeichert
494
17.11.13 Eine Vokabel wird gelöscht
496
17.11.14 Die Neueingabe von Vokabeln wird beendet
496
17.11.15 Mögliche Erweiterungen des Programms
497
17.12 Übung
497
17.12.1 Benutzeroberfläche
498
17.12.2 Bedienung
498
17.12.3 Zugriff auf Date Edit Widget
500
17.12.4 Eintrag im List Widget aufsplitten
500
Anhang
501
A Installationen
501
A.1 Installationen unter Windows
501
A.2 Installationen unter Ubuntu Linux
512
A.3 Installationen unter macOS
516
A.4 Ubuntu Linux unter Windows installieren
520
B Hilfestellungen und Übersichten
525
B.1 Windows – einige Tastenkombinationen
525
B.2 Unix-Befehle
525
B.3 Schlüsselwörter der Sprache C++
529
Index
531