Einführung in C++

(Autor)

Buch | Hardcover
520 Seiten
2014
Galileo Press (Verlag)
978-3-8362-2677-6 (ISBN)

Lese- und Medienproben

Einführung in C++ - Torsten T. Will
24,90 inkl. MwSt
Ohne Umwege und ohne Vorkenntnisse lernen Sie, in C++ zu programmieren - und zwar ganz nebenbei so, wie es aktuelle Profi-Praxis ist. Der vermeintlichen Dinosaurier unter den objektorientierten Sprachen hat neue Standards und moderne Programmierwerkzeuge zu bieten. Lernen Sie hier, damit umzugehen. Lassen Sie sich in der C++-Welt an die Hand nehmen. Ob es um einfache Variablen oder anonyme Funktionen geht - unser Autor führt Sie an allen Fallstricken vorbei und erläutert Fachbegriffe und Best Practices zu den Grundlagen genauso wie zu professionellen Themen.
Ihr Weg zum C++-Profi

Grundlagen zuerst
Grundkonzepte wie Anweisung und Datentypen machen den Anfang. Darauf bauen Sie auf, wenn Sie nach und nach die Sprache verstehen. Machen Sie sich mit Entwicklungsumgebung und Compiler vertraut und legen Sie los – ohne Vorkenntnisse.

Objektorientierung mit C++
Klassen, Objekte und Funktionen sind wichtig, aber nicht alles. Steigen Sie in Entwurfsmuster ein und verwenden Sie eigene Datentypen. Schreiben Sie Code, den Sie auch übermorgen noch schätzen und verstehen.

Überblick über Standards
Lernen Sie, was mit dem Sprachstandard C++11/14 möglich ist – aber auch, wie es ohne ihn geht. Neuere Sprachfeatures werden konsequent ausgezeichnet.

Zeigerarithmetik alt und neu
Rohe Zeiger und Smarte Pointer – Sie lernen sie nicht nur beide zu beherrschen, sondern sehen auch, wie beides zusammengeht.

Aufgaben und Beispiele
Zu jedem Kapitel gibt es reichlich Codebeispiele. Aufgaben zur Wiederholung, Vertiefung oder zum Knobeln sind separat ausgezeichnet.

Themen sind insbesondere:
  • Ausdrücke und Anweisungen
  • Werte und Datentypen
  • Ablaufkontrolle
  • Algorithmen und Komplexität
  • Compiler, IDE und Konsole
  • Vererbung, Aggregation, Design Patterns
  • Heap und Stack verstehen
  • Dateizugriffe und Streams
  • Lebenszyklen und Zugriffskontrolle

Torsten T. Will, Jahrgang 1970, beschäftigte sich schon während seines Diploms in Informatik mit Programmiersprachen und ihren Konzepten. C++ hat ihn schon in seinen Anfängen fasziniert und begleitet. Andere Programmierprojekte bewältigte er vor allem in Pascal, Java, Scala und Python. Seit 2004 schreibt er im Fachmagazin c't gelegentlich über C++ und Python. Was dann noch an Zeit übrig bleibt, geht in die Fotografie.

Geleitwort des Fachgutachters
18
Vorwort
20
TEIL I
Erste Schritte
23
1
Über dieses Buch
25

1.1
Der C++-Standard
26
1.2
Verwendete Formatierungen
27

2
Vom Problem zum Programm
29

2.1
Was ist Programmieren?
30
2.2
Softwareentwicklungsmethoden
30
2.3
Entwurfsmuster
32
2.4
Algorithmen
33
2.5
Ressourcen
34

3
Programmieren in C++
36

3.1
Übersetzen
37
3.2
Aktuelle Compiler
37
3.2.1
Gnu C++
39
3.2.2
Clang++ der LLVM
39
3.2.3
Microsoft Visual Studio
39
3.3
Entwicklungsumgebungen
39
3.4
Die Kommandozeile unter Ubuntu
41
3.4.1
Ein Programm erstellen
42
3.4.2
Automatisieren mit Makefile
44
3.5
Die IDE »Microsoft Visual Studio Express« unter Windows
44
3.6
Schneller
47
3.7
Aufgaben
47

4
Ein ganz schneller Überblick
49

4.1
Kommentare
50
4.2
Die »include«-Direktive
50
4.3
Die Standardbibliothek
51
4.4
Die Funktion »main()«
51
4.5
Typen
51
4.6
Variablen
52
4.7
Initialisierung
52
4.8
Ausgabe auf der Konsole
53
4.9
Anweisungen
53
4.10
Aufgaben
54

5
Ohne Eile erklärt
56

5.1
Leerräume, Bezeichner und Token
58
5.2
Kommentare
59
5.3
Funktionen und Argumente
60
5.4
Seiteneffekt-Operatoren
61
5.5
Die »main«-Funktion
62
5.6
Anweisungen
64
5.7
Ausdrücke
66
5.8
Zuweisungen
68
5.9
Typen
69
5.9.1
Der Typ »int«
71
5.9.2
Der Typ »bool«
72
5.9.3
Die Typen »const char*« und »std::string«
72
5.9.4
Parametrisierte Typen
73
5.10
Variablen – Deklaration, Definition und Initialisierung
74
5.11
Details zur »include«-Direktive
75
5.12
Eingabe und Ausgabe
76
5.13
Der Namensraum »std«
77
5.14
Aufgaben
79

6
Programmiertechnik, 1. Dan: Lesbarer Code
81

6.1
Kommentare
81
6.2
Dokumentation
82
6.3
Einrückungen und Zeilenlänge
83
6.4
Zeilen pro Funktion und Datei
84
6.5
Klammern und Leerzeichen
84
6.6
Namen
86

TEIL II
Die Elemente von C++
87
7
Operatoren
89

7.1
Operatoren und Operanden
90
7.2
Überblick über Operatoren
90
7.3
Arithmetische Operatoren
91
7.4
Bitweise Arithmetik
92
7.5
Zuweisungsoperatoren
93
7.6
Post- und Präinkrement sowie Post- und Prädekrement
94
7.7
Relationale Operatoren
95
7.8
Logische Operatoren
95
7.8.1
Kurzschluss-Auswertung
95
7.8.2
Alternative Token
96
7.9
Pointer- und Dereferenzierungsoperatoren
97
7.10
Besondere Operatoren
97
7.11
Funktionsähnliche Operatoren
99
7.12
Operatorreihenfolge
100
7.13
Aufgaben
101

8
Eingebaute Typen
103

8.1
Eingebaute Datentypen
105
8.2
Eingebaute Datentypen initialisieren
105
8.3
Ein schneller Überblick
106
8.4
Ganzzahlen
107
8.4.1
Operationen auf Ganzzahlen
108
8.4.2
Arithmetische Typumwandlung
109
8.4.3
Ganzzahl-Überlauf
110
8.4.4
Ganzzahl-Literale
111
8.4.5
Alias-Zahlentypen
112
8.4.6
Fließkomma-Literale
115
8.4.7
Die Fließkomma-Besonderheiten
116
8.4.8
Fließkomma-Interna
117
8.5
Wahrheitswerte
118
8.6
Zeichentypen
119
8.6.1
Internationale Zeichen
121
8.6.2
Unicode in C++
122
8.7
Aufgaben
122

9
Strings und Streams
124

9.1
Der Zeichenkettentyp »string«
124
9.1.1
Initialisierung
126
9.1.2
Funktionen und Methoden
127
9.1.3
Andere Stringtypen
127
9.2
Streams
129
9.3
Eingabe- und Ausgabeoperatoren
130
9.3.1
»getline«
131
9.3.2
Dateien für die Ein- und Ausgabe
131
9.3.3
Manipulatoren
132
9.3.4
Der Manipulator »endl«
133
9.4
Aufgaben
134

10
Behälter und Zeiger
135

10.1
Parametrisierte Typen
136
10.2
Die einfachen Sequenzcontainer
136
10.2.1
»array«
137
10.2.2
»vector«
139
10.3
Weitere Container
141
10.3.1
Sequenzbasierte Container
141
10.3.2
Assoziative Container
142
10.4
Container-Gemeinsamkeiten
144
10.5
Algorithmen
145
10.6
Zeiger und C-Arrays
146
10.6.1
Zeigertypen
146
10.6.2
C-Arrays
146
10.7
Aufgaben
147

11
Funktionen
148

11.1
Deklaration und Definition einer Funktion
149
11.2
Funktionstyp
150
11.3
Funktionen verwenden
150
11.4
Eine Funktion definieren
151
11.5
Mehr zu Parametern
152
11.5.1
Call-by-Value
153
11.5.2
Call-by-Reference
153
11.5.3
Konstante Referenzen
154
11.5.4
Aufruf als Wert, Referenz oder konstante Referenz?
155
11.6
Funktionskörper
156
11.7
Parameter umwandeln
158
11.8
Funktionen überladen
160
11.9
Default-Parameter
162
11.10
Beliebig viele Argumente
163
11.11
Alternative Schreibweise zur Funktionsdeklaration
164
11.12
Spezialitäten
165
11.12.1
noexcept
165
11.12.2
constexpr
165
11.12.3
Gelöschte Funktionen
166
11.12.4
Spezialitäten bei Klassenmethoden
166
11.13
Aufgaben
167

12
Anweisungen im Detail
169

12.1
Anweisungsblock
171
12.1.1
Freistehende Blöcke und Gültigkeit von Variablen
172
12.2
Die leere Anweisung
174
12.3
Deklarationsanweisung
175
12.4
Ausdrucksanweisung
176
12.5
Die if-Anweisung
176
12.6
»while«-Schleife
179
12.7
»do-while«-Schleife
180
12.8
»for«-Schleife
181
12.9
Die bereichsbasierte »for«-Schleife
182
12.10
Die »switch«-Verzweigung
183
12.11
»break«-Anweisung
187
12.12
Die »continue«-Anweisung
188
12.13
Die »return«-Anweisung
189
12.14
Die »goto«-Anweisung
190
12.15
»try-catch«-Block und »throw«
192
12.16
Zusammenfassung
193
12.17
Aufgaben
193

13
Ausdrücke im Detail
196

13.1
Berechnungen und Seiteneffekte
197
13.2
Arten von Ausdrücken
198
13.3
Literale
199
13.4
Bezeichner
200
13.5
Klammern
201
13.6
Funktionsaufruf und Index-Zugriff
201
13.7
Zuweisung
201
13.8
Typumwandlung
203
13.9
Aufgaben
204

14
Fehlerbehandlung
205

14.1
Fehlerbehandlung mit Rückgabewerten
207
14.2
Was ist eine Ausnahme?
210
14.2.1
Ausnahmen auslösen und behandeln
211
14.2.2
Aufrufstapel abwickeln
212
14.3
Kleinere Fehlerbehandlungen
213
14.4
Weiterwerfen – »rethrow«
213
14.5
Die Reihenfolge im »catch«
214
14.5.1
Kein »finally«
215
14.5.2
Exceptions der Standardbibliothek
215
14.6
Typen für Exceptions
216
14.7
Wenn eine Exception aus »main« herausfällt
217
14.8
Aufgaben
217

15
Programmiertechnik, 2. Dan: Modularisierung
219

15.1
Programm, Bibliothek, Objektdatei
219
15.2
Bausteine
220
15.3
Trennen der Funktionalitäten
221

TEIL III
Datenstrukturen
223
16
Erste eigene Datentypen
225

16.1
Initialisierung
226
16.2
Rückgabe eigener Typen
227
16.3
Methoden statt Funktionen
228
16.4
Das bessere »drucke«
231
16.5
Eine Ausgabe wie jede andere
232
16.6
Methoden inline definieren
233
16.7
Implementierung und Definition trennen
234
16.8
Initialisierung per Konstruktor
235
16.8.1
Member-Defaultwerte in der Deklaration
238
16.8.2
Konstruktor-Delegation
238
16.8.3
Default-Werte für die Konstruktor-Parameter
239
16.8.4
»init«-Methode nicht im Konstruktor aufrufen
240
16.8.5
Exceptions im Konstruktor
241
16.9
Struktur oder Klasse?
241
16.9.1
Kapselung
242
16.9.2
Public und Private, Struktur und Klasse
242
16.9.3
Daten mit »struct«, Verhalten mit »class«
243
16.9.4
Initialisierung von Typen mit privaten Daten
243
16.10
Zusammenfassung
245
16.11
Aufgaben
245

17
Verwendung eigener Datentypen
248

17.1
Klassen als Werte verwenden
251
17.1.1
Wert-Parameter
251
17.1.2
Rückgaben
252
17.1.3
Performance beim Zurückgeben
253
17.2
Konstruktoren nutzen
253
17.3
Typumwandlungen
254
17.4
Kapseln und entkapseln
256
17.4.1
Entkapseln
256
17.4.2
Setzen Sie Konvertierungsmethoden sparsam ein
257
17.4.3
Totale Kapselung
258
17.4.4
Flüssiges Programmieren
259
17.4.5
Methoden mit »const« markieren
260
17.5
Typen lokal einen Namen geben
260
17.6
Typdeduktion mit »auto«
263
17.7
Eigene Klassen in Standardcontainern
266
17.8
Aufgaben
268

18
Namespace und Static
270

18.1
Der Namensraum »std«
270
18.2
Anonymer Namensraum
274
18.3
»static« macht lokal
275
18.4
»static« teilt gern
276
18.5
»static« macht dauerhaft
279
18.6
Zusammenfassung
281
18.7
Aufgaben
281

19
Const
284

19.1
Const-Parameter
285
19.2
Const-Methoden
286
19.3
Const-Variablen
288
19.4
Const-Rückgaben
289
19.4.1
Const zusammen mit static
292
19.4.2
Noch konstanter mit »constexpr«
293
19.4.3
»constexpr« als Rückgabe
295
19.5
Const-Korrektheit
296
19.6
Zusammenfassung
297
19.7
Aufgaben
298

20
Vererbung
300

20.1
Beziehungen
301
20.1.1
Hat-ein-Komposition
301
20.1.2
Hat-ein-Aggregation
301
20.1.3
Ist-ein-Vererbung
302
20.1.4
Nicht: ist eine instanz-von
302
20.2
Vererbung in C++
303
20.3
Hat-ein versus ist-ein
304
20.4
Gemeinsamkeiten finden
304
20.5
Abgeleitete Typen erweitern
307
20.6
Methoden überschreiben
308
20.7
Wie Methoden funktionieren
309
20.8
Virtuelle Methoden
310
20.9
Konstruktoren in Klassenhierarchien
312
20.10
Typumwandlung in Klassenhierarchien
314
20.10.1
Die Vererbungshierarchie aufwärts unwandeln
314
20.10.2
Die Vererbungshierarchie abwärts umwandeln
314
20.10.3
Referenzen behalten auch die Typinformation
315
20.11
Wann virtuell?
315
20.12
Andere Designs zur Erweiterbarkeit
317
20.13
Aufgaben
318

21
Der Lebenszyklus von Klassen
321

21.1
Erzeugung und Zerstörung
322
21.2
Temporary: Kurzlebige Werte
324
21.3
Der Destruktor zum Konstruktor
325
21.3.1
Kein Destruktor nötig
327
21.3.2
Ressourcen im Destruktor
328
21.4
Yoda-Bedingung
330
21.5
Konstruktion, Destruktion und Exceptions
331
21.6
Kopieren
333
21.7
Zuweisungsoperator
335
21.8
Streichen von Methoden
339
21.9
Verschiebeoperationen
340
21.10
Operatoren
344
21.11
Eigene Operatoren in einem Datentyp
348
21.12
Besondere Klassenformen
353
21.12.1
Abstrakte Klassen und Methoden
353
21.12.2
Aufzählungsklassen
355
21.13
Aufgaben
356

22
Programmiertechnik, 3. Dan: Die Nuller-Regel
359

22.1
Die großen Fünf
359
22.2
Hilfskonstrukt per Verbot
360
22.3
Die Nullerregel und ihr Einsatz
361
22.4
Ausnahmen von der Nullerregel
362

TEIL IV
Fortgeschrittene Themen
365
23
Zeiger
367

23.1
Adressen
368
23.2
Zeiger
369
23.3
Heapspeicher und Stapelspeicher
372
23.3.1
Der Stapel
372
23.3.2
Der Heap
374
23.4
Smarte Pointer
376
23.4.1
»unique«
378
23.4.2
»shared«
382
23.5
Rohe Zeiger
385
23.6
C-Arrays
390
23.6.1
Rechnen mit Zeigern
391
23.6.2
Verfall von C-Arrays
392
23.6.3
Dynamische C-Arrays
393
23.6.4
Zeichenkettenliterale
394
23.7
Iteratoren
396
23.7.1
Mehr Funktionalität mit Iteratoren
398
23.7.2
Zeiger als Iteratoren
399
23.8
Zeiger im Container
400
23.9
Die Ausnahme: Wann das Wegräumen nicht nötig ist
400
23.10
Aufgaben
402

24
Makros
405

24.1
Der Präprozessor
406
24.2
Vorsicht vor fehlenden Klammern
410
24.3
Vorsicht vor Mehrfachausführung
410
24.4
Typvariabilität von Makros
411
24.5
Zusammenfassung
413
24.6
Aufgaben
414

25
Schnittstelle zu C
416

25.1
Mit Bibliotheken arbeiten
417
25.2
C-Header
418
25.3
C-Ressourcen
421
25.4
»void«-Pointer
422
25.5
Daten lesen
423
25.6
Das Hauptprogramm
424
25.7
Zusammenfassung
425
25.8
Aufgaben
425

26
Template-Funktionen
427

26.1
Überladung
428
26.2
Ein Typ als Parameter
429
26.3
Funktionskörper einer Template-Funktion
429
26.4
Zahlen als Template-Parameter
431
26.5
Viele Funktionen
432
26.6
Parameter mit Extras
432
26.7
Template-Methoden sind auch nur Funktionen
435
26.8
Template-Funktionen in der Standardbibliothek
436
26.9
Iteratoren statt Container als Template-Parameter
437
26.10
Beispiel: Informationen über Zahlen
439
26.11
Aufgaben
440

27
Eine Klasse als Funktion
442

27.1
Werte für einen »function«-Parameter
443
27.2
C-Funktionspointer
444
27.3
Die etwas andere Funktion
445
27.4
Praktische Funktoren
448
27.5
Algorithmen mit Funktoren
450
27.6
Anonyme Funktionen alias Lambda-Ausdrücke
451
27.6.1
Lambdas mit Zugriff nach außen
452
27.6.2
Für Ihre Bequemlichkeit
454
27.7
Aufgaben
455

Anhang
457

A
C++11-Besonderheiten
458
B
Operator-Präzedenzen
470
C
Lösungen
472

Index
515

»Buchtipp!« iX - Magazin für professionelle Informationstechnik 201507

»Buchtipp!«

»Die C++-Einführung eignet sich wegen ihrer Systematik, der Kontrollfragen und eines ausführlichen Index gut zum Selbststudium. Die Beschreibungen sind durchweg gut verständlich, die zahlreichen Beispiele instruktiv. «

Erscheint lt. Verlag 5.11.2014
Reihe/Serie Galileo Computing
Verlagsort Bonn
Sprache deutsch
Maße 168 x 240 mm
Gewicht 1000 g
Einbandart gebunden
Themenwelt Informatik Programmiersprachen / -werkzeuge C / C++
Mathematik / Informatik Informatik Software Entwicklung
Schlagworte C++ • C lernen • C++ lernen • C++ programmieren • C++ (Programmiersprache); Einführung • Objektorientierung • OOP • Programmieren lernen • Softwareentwicklung • Standardbibliothek
ISBN-10 3-8362-2677-4 / 3836226774
ISBN-13 978-3-8362-2677-6 / 9783836226776
Zustand Neuware
Haben Sie eine Frage zum Produkt?
Wie bewerten Sie den Artikel?
Bitte geben Sie Ihre Bewertung ein:
Bitte geben Sie Daten ein:
Mehr entdecken
aus dem Bereich
das umfassende Handbuch

von Jürgen Wolf; René Krooß

Buch | Hardcover (2023)
Rheinwerk (Verlag)
49,90