CPP-Tutor
Hier dreht sich alles ums Thema C++ Programmierung
 
 

Inhaltsverzeichnis
C++ Programmierung

1. Einleitung

1.1 Voraussetzungen
1.2 Symbole im Buch
1.3 Das sehen wir uns nicht (ausführlich) an

Teil 1: Prozedurale Programmierung

2. Die Entwicklungsumgebung

2.1 Editor
2.2 Compiler
2.3 Linker
2.4 CodeBlocks und MinGW

3. Aufbau eines C++ Programms

3.1 Die main() Funktion
3.2 Allgemeine Syntax einer Anweisung
3.3 Quell-Code Formatierung

4. Kommentare

4.1 Kommentare
4.2 Mehrzeilen-Kommentar
4.3 Einzeilen-Kommentar

5. Ausgabestream cout

5.1 Ausgabestream cout
5.2 Ausgabe von Strings und Zeichen
5.3 Escape-Sequenzen
5.4 Ausgabe von Daten (Zahlen)
5.5 Dezimale, hexadezimale und oktale Ausgabe
5.6 Manipulatoren
5.7 Übungen

6. Variablen

6.1 Variablendefinition
6.2 Ganzzahl-Datentypen6.3 Gleitkomma-Datentypen
6.4 Zeichen-Datentypen
6.5 Weitere elementare Datentypen
6.6 Sonstiges zur Variablendefinition
6.7 inline-Variable
6.8 Referenz-Variable
6.9 Typdefinition mittels decltype
6.10 Eigenschaften von Datentypen
6.11 sizeof() Operator
6.12 Übungen

7. Konstanten

7.1 Überblick
7.2 Literale (unbenannte Konstanten)
7.3 Benannte Konstanten
7.4 constexpr Ausdruck

8. Zuweisungen

8.1 Zuweisung von numerischen Daten
8.2 Zuweisungen von Zeichen- und String-Literalen
8.3 Mehrfach-Zuweisungen
8.4 Übungen

9. Grundrechenoperationen und Komma-Operator

9.1 Grundrechenoperationen
9.2 Kurzschreibweisen
9.3 Komma-Operator
9.4 Übungen

10. Bit- und Schiebeoperationen

10.1 Bitoperationen
10.2 Schiebeoperationen
10.3 Kurzschreibweisen
10.4 Übungen

11. Vergleichs- und Logikoperationen11.1 Vergleichsoperationen

11.2 Anpassung der Datentypen der Operanden
11.3 Logikoperationen

12. Rangfolge der Operatoren
13. Zeiger

13.1 Zeigerdefinition
13.2 Adressberechnung
13.3 Zeigerzugriffe
13.4 void-Zeiger
13.5 nullptr
13.6 String-Literale und Zeiger
13.7 Operationen mit Zeiger
13.8 Zeiger in cout-Anweisungen
13.9 const und Zeiger
13.10 Übungen

14. Typkonvertierungen

14.1 Typkonvertierung im alten Stil (C-Stil)
14.2 C++ Typkonvertierungen
14.3 Automatische Typkonvertierungen (Promotions)

15. Eingabestream cin

15.1 Eingabestream cin
15.2 Eingabe von numerischen Daten und Texten
15.3 Einlesen von Zeilen
15.4 Fehlerfälle
15.5 Übungen

16. Dateizugriffe

16.1 Text- und Binärdatei
16.2 Anwenden von Dateistreams
16.3 Schreiben in Datei
16.4 Einlesen aus Datei
16.5 Schreiben und Lesen16.6 Sonstige Dateioperationen
16.7 Übungen

17. if Verzweigung

17.1 Syntax
17.2 Auszuführende Anweisungen
17.3 Mehrere Bedingungen
17.4 Bedingungsoperator und goto
17.5 Übungen

18. switch Verzweigung

18.1 Syntax
18.2 Ablauf der Verzweigung
18.3 break Anweisung
18.4 Aktion im case-Zweig
18.5 Übungen

19. for-Schleife

19.1 Syntax
19.2 Initialisierungsausdruck
19.3 Abbruchbedingung
19.4 Schleifenaktion
19.5 Schleifenanweisung
19.6 Übungen

20. while-Schleifen

20.1 while-Schleife
20.2 do-while Schleife
20.3 Übungen

21. break und continue

21.1 break-Anweisung
21.2 continue-Anweisung
21.3 Übungen

22. Felder und C-Strings

22.1 Eindimensionale Felder22.2 Mehrdimensionale Felder
22.3 Zugriff auf Feldelemente
22.4 Initialisierung eines Feldes
22.5 Felder und Zeiger
22.6 range-for Schleife
22.7 C-Strings und Felder
22.8 Übungen

23. String-Objekte I

23.1 string-Klasse
23.2 String definieren
23.3 Ein- und Ausgabe eines Strings
23.4 String-Operationen
23.5 Übungen

24. String Konvertierungen

24.1 ASCII nach binär
24.2 Fehler bei der Binär-Konvertierung
24.3 Binär nach ASCII
24.4 String zerlegen
24.5 Übungen

25. Funktionen

25.1 Syntax
25.2 Funktionsdeklaration (Signatur)
25.3 Funktionsdefinition
25.4 Funktionsaufruf
25.5 Funktionsparameter
25.6 Funktionsrückgabewert
25.7 Rekursive Funktionen
25.8 constexpr Funktionen
25.9 Sonstiges zu Funktionen
25.10 Übungen

26. Gültigkeitsbereiche

26.1 Modul- oder Dateibereich
26.2 Funktionsbereich
26.3 Blockbereich
26.4 Zugriff auf globale Daten (scope resolution operator, Gültigkeitsbereichsoperator)

27. Speicherklassen und Qualifizierer

27.1 extern Speicherklasse
27.2 static Speicherklasse
27.3 mutable Speicherklasse
27.4 const Qualifizierer
27.5 volatile Qualifizierer
27.6 Übungen

28. using und typedef Anweisung

28.1 using-Anweisung
28.2 using und Funktionszeiger
28.3 typedef-Anweisung

29. enum Datentyp

29.1 Syntax
29.2 Werte der Enumeratoren
29.3 Fehlerfallen
29.4 enum Klasse

30. Bitfelder

30.1 Datenkomprimierung und Syntax
30.2 Zugriff auf Bitfeld-Elemente
30.3 Zugriff auf Peripherie über Bitfelder
30.4 Besonderheiten von Bitfeldern

31. Präprozessor Direktiven

31.1 include-Direktive
31.2 define-Direktive
31.3 undef-Direktive
31.4 ifdef-, ifndef- und endif-Direktive31.5 if-, elif-, else und endif-Direktive
31.6 __has_include Ausdruck
31.7 defined-Direktive und vordefinierte Symbole
31.8 Weitere Präprozessor-Direktiven
31.9 Attribute

Teil 2: Objektorientierte Programmierung

32. Klassen

32.1 Einführung
32.2 Klasse
32.3 Objekte
32.4 OOP Begriffe
32.5 Definition Memberfunktionen
32.6 Zugriffsrechte in Klassen
32.7 Zugriff auf Klassenmember
32.8 const Memberfunktionen und mutable Member
32.9 Aufruf von Funktionen aus Memberfunktionen
32.10 Kopieren von Objekten
32.11 Objekte als Parameter
32.12 Objekte als Rückgabewert
32.13 Default-Memberfunktionen und -Operatoren
32.14 Entwicklung einer Klasse
32.15 Die objektorientierte Programmierung (OOP)
32.16 Übungen

33. Memberzeiger

33.1 Schnittstellenzeiger (Zeiger auf Memberfunktionen)
33.2 Eigenschaftszeiger (Datenzeiger)

34. Varianten

34.1 Syntax
34.2 Beispiel einer Variante
34.3 Anonyme Variante34.4 Initialisierung einer Variante

35. Konstruktor und Destruktor

35.1 Konstruktordefinition
35.2 Aufrufzeitpunkt des Konstruktors
35.3 Konstruktorparameter, Initialisiererliste und Klassenkonstanten
35.4 Objektfelder
35.5 Expliziter Konstruktor
35.6 Destruktordefinition
35.7 Aufrufzeitpunkt des Destruktors
35.8 Übungen

36. Inline (Member-)Funktionen

36.1 Einführung
36.2 inline-Funktionen
36.3 inline-Memberfunktionen

37. Default-Parameter

37.1 Syntax
37.2 Definition des Default-Parameters
37.3 Aufruf der Funktion
37.4 Funktionserweiterung durch Default-Parameter
37.5 Übungen

38. Statische Member

38.1 Statische Eigenschaften
38.2 Statische Memberfunktionen
38.3 Übungen

39. this-Zeiger

39.1 Übungen

40. Eingeschlossene Objekte

40.1 Definition eines eingeschlossenen Objekts
40.2 Aufruf des Konstruktors eines eingeschlossenen Objekts
40.3 Zugriff auf Member eines eingeschlossenen Objekts

41. Operatoren new und delete

41.1 new Operator
41.2 delete Operator
41.3 Übungen

42. Dynamische Eigenschaften und Objekte

42.1 Dynamische Eigenschaften
42.2 Dynamische Objekte
42.3 Dynamische Objektfelder
42.4 Vorwärtsdeklaration
42.5 Übungen

43. Spezielle Zeiger

43.1 unique_ptr
43.2 shared_ptr
43.3 weak_ptr

44. Überladen von Funktionen/Memberfunktionen

44.1 Einführung
44.2 deleted functions
44.3 Beispiel zum Überladen
44.4 Übungen

45. Überladen des Konstruktors

45.1 Überladen des Konstruktors
45.2 Kopierkonstruktor
45.3 Move-Konstruktor (Move-Semantik, Teil 1)
45.4 Delegierender Konstruktor
45.5 default und delete
45.6 Übungen

46. Überladen des Zuweisungsoperators

46.1 Überladen des Operators =
46.2 Returnwert des Operators =
46.3 Regel der großen 5
46.4 Move-Operator = (Move-Semantik, Teil 2)46.5 Aufruf des überladenen Operators =
46.6 Mehrfaches Überladen
46.7 Verhindern von Zuweisungen bei Objekten
46.8 Übungen

47. Allgemeines Überladen von Operatoren

47.1 Überladen von binären Operatoren
47.2 Überladen von logischen Operatoren
47.3 Überladen von unären Operatoren
47.4 const-Objekte und überladene Operatoren
47.5 Sonstige Hinweise zum Überladen von Operatoren
47.6 Übungen

48. Überladen spezieller Operatoren

48.1 Überladen der Operatoren ++ und - -
48.2 Überladen des cast-Operators
48.3 Überladen des Operators >>
48.4 Überladen des Operators <<
48.5 Funktionsoperator ( )
48.6 Überladen des Indexoperators [ ]
48.7 Anwender-definierte Literale
48.8 Überladen von new und delete
48.9 Übungen

49. Abgeleitete Klassen

49.1 Beispiel einer Ableitung
49.2 Zugriffsrecht protected
49.3 Ableitung
49.4 Konstruktor und Destruktor
49.5 Zugriff auf Basisklassen-Member
49.6 Basisklassenzeiger
49.7 Einblenden von Basisklassen-Memberfunktionen
49.8 Übungen

50. Mehrfach abgeleitete Klassen50.1 Grundprinzip der Mehrfach-Ableitung

50.2 Konstruktor und Destruktor
50.3 Gleichnamige Member in den Basisklassen

51. Virtuelle Memberfunktionen

51.1 Basisklassenzeiger
51.2 Deklaration von virtuellen Memberfunktionen
51.3 Pure virtual Memberfunktionen
51.4 Überschreiben von virtuellen Memberfunktionen
51.5 Virtueller Destruktor
51.6 override und final
51.7 Object slicing
51.8 Übung

52. Virtuelle Basisklassen

52.1 Probleme bei Mehrfach-Ableitung
52.2 Virtuelle Basisklassen
52.3 Virtuelle Basisklassen und Konstruktore
52.4 Übung

53. friend Funktionen & Klassen

53.1 friend-Klassen
53.2 friend-Funktionen
53.3 Übungen

54. Ausnahme-Behandlung

54.1 Bisherige Fehlerbehandlung
54.2 Einleiten und Auslösen einer Ausnahme
54.3 Abfangen (Behandeln) einer Ausnahme
54.4 Ausnahmen in Funktionen/Memberfunktionen
54.5 Ausnahmen im Konstruktor
54.6 Weiterleiten von Ausnahmen
54.7 throw Parameter
54.8 Ausnahme-Klassen
54.9 C++ Standard-Ausnahmen
54.10 Sonstige Ausnahme-Funktionen
54.11 noexcept Spezifizierer
54.12 Compile-Zeit "Ausnahme"
54.13 Übungen

55. Laufzeit-Typinformationen

55.1 Übungen

56. Typkonvertierungen und Klassenzeiger

56.1 static_cast Operator
56.2 dynamic_cast Operator

57. Namensräume

57.1 Definition eines Namensraums
57.2 Anwendung von Namensräumen
57.3 Zugriff auf Namensräume
57.4 Geschachtelte Namensräume
57.5 Anonyme Namensräume
57.6 Inline-Namensraum

58. Funktions-/Variablentemplates

58.1 Definition eines Funktionstemplates
58.2 Aufruf von Funktionstemplates
58.3 Spezialisierung und Überladen von Funktionstemplates
58.4 Lokale Daten mit formalem Datentyp
58.5 Mehrere Template-Parameter
58.6 Variadische Funktionstemplates
58.7 Externe Funktionstemplates
58.8 Variablentemplates
58.9 constexpr if Anweisung
58.10 Fold expression
58.11 Übungen

59. Klassentemplates

59.1 Definition eines Klassentemplates
59.2 Formaler Datentyp in der Signatur von Memberfunktionen
59.3 Definition von Memberfunktionen
59.4 Definition von Objekten
59.5 Überladen von Template-Memberfunktionen
59.6 Mehrere formale Datentypen
59.7 Non-type Parameter
59.8 Default-Datentyp
59.9 using Anweisung und Templates
59.10 Extern und Klassentemplates

60. Template-Spezialitäten

60.1 Templates als Parameter
60.2 Klassentemplates und Ableitungen
60.3 Membertemplates
60.4 Variadische Membertemplates
60.5 Template Spezialisierungen
60.6 Partielle Template-Spezialisierung
60.7 Partielle Template-Spezialisierung und non-type Argumente
60.8 Template-Template Parameter
60.9 Template als Compilezeit Ausdruck

61. Funktionsobjekte und Lambda-Ausdrücke

61.1 Funktionsobjekte
61.2 Lambda-Ausdrücke

Teil 3: C++ Standardbibliothek

62. Übersicht

62.1 Bibliothekskomponenten
62.2 Gemeinsame Container-Eigenschaften und -Operationen
62.3 Objekte und Container

63. String-Objekte II

63.1 Speicherverwaltung
63.2 string Iteratoren
63.3 Vergleichen von strings63.4 Suchen in strings
63.5 Strings und char-Felder
63.6 Anhängen und Ersetzen in Strings
63.7 Einfügen und Löschen in Strings
63.8 Übungen

64. Hilfstemplates und Structured Binding

64.1 numeric_limits<>
64.2 Type-traits
64.3 bitset
64.4 pair
64.5 tuple
64.6 variant
64.7 Structured Binding
64.8 Übungen

65. Iteratoren

65.1 Iterator-Kategorien
65.2 Iterator Operationen
65.3 const-Iteratoren
65.4 Iterator-Funktionen
65.5 Iterator-Adapter
65.6 Stream-Iteratoren

66. Sequenzielle Container

66.1 Containertypen
66.2 Container-Objekte definieren
66.3 Container und Iteratoren
66.4 Elemente Einfügen und Löschen
66.5 Elementzugriff
66.6 Containerkapazität
66.7 Container-Operationen
66.8 Übungen

67. Assoziative Container

67.1 Containertypen 67.2 Objekte definieren
67.3 Container und Iteratoren
67.4 Elemente Einfügen und Löschen
67.5 Elementzugriff
67.6 Suchen in Container
67.7 Containerkapazität
67.8 Übungen

68. unordered assoziative Container

68.1 Containertypen
68.2 Objekte definieren
68.3 Container und Iteratoren
68.4 Elemente Einfügen und Löschen
68.5 Elementzugriff
68.6 Suchen in Container
68.7 Containerkapazität

69. Container Adapter

69.1 stack
69.2 queue
69.3 priority_queue

70. Algorithmen I

70.1 min/max Algorithmen
70.2 Nicht-modifizierende sequenzielle Algorithmen
70.3 Modifizierende sequenzielle Algorithmen
70.4 Partitionierungs-Algorithmen

71. Algorithmen II

71.1 Sortier-Algorithmen
71.2 Mengen-Algorithmen
71.3 Permutations-Algorithmen
71.4 Numerische Algorithmen

72. Anhänge72.1 Anhang A: Die 2. Form der main() Funktion

72.2 Anhang B: Beispiel zu Escape-Sequenzen
72.3 Anhang C: Tabelle der ASCII-Zeichen
72.4 Anhang D: Hexadezimal- und Oktalsystem
72.5 Anhang E: Formatierungsflags
72.6 Anhang F: cout Pufferung
72.7 Anhang G: cerr und clog
72.8 Anhang H: Das 2er Komplement
72.9 Anhang I: Eigenschaften von Datentypen
72.10 Anhang J: getline Memberfunktion
72.11 Anhang K: Funktionszeiger
72.12 Anhang L: extern "C" Speicherklasse
72.13 Anhang M: Makro Definitionen
72.14 Anhang N: Klassen ohne Memberfunktionen
72.15 Anhang O: Initialisierung Objekte mit nur public Member
72.16 Anhang P: Überschreiben von Variablen
72.17 Anhang Q: Demo Klasse
72.18 Anhang R: Adress Klasse
72.19 Anhang S: Lösung zu Iteratoren
72.20 Anhang T: Parameterbezeichnungen