Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
C++ ist eine der wichtigsten und meistgenutzten Programmiersprachen weltweit, gilt aber auch als sehr kompliziert.
Dieses Buch vermittelt Ihnen in leicht verständlichen Lektionen die Grundlagen der C++-Programmierung nach dem neuesten Standard C++ 17. Schritt für Schritt erfahren Sie alles über die Sprache und die Konzepte, die der C++-Programmierung zugrunde liegen.
Erste Schritte mit C++
- Der sichere Einstieg
- Keine Vorkenntnisse erforderlich
- Von den Grundlagen bis zum Profikurs
Der mehrteilige Aufbau des Buches spiegelt dabei Ihre vier Entwicklungsstufen wider:
Auf der ersten Stufe werden Sie in lockerem, leicht verständlichem Stil in die Grundlagen und Hintergründe der Programmierung eingeführt.
Die zweite Stufe erschließt Ihnen dann die wichtigsten Elemente der C++-Standardbibliothek, mit deren Hilfe Sie die unterschiedlichsten Programmideen umsetzen können.
Der dritte Teil führt Sie in die Geheimnisse der Objektorientierung ein und im vierten Teil untersuchen wir noch einige weit fortgeschrittene Themen wie die Operatorenüberladung, Zeiger auf Funktionen oder die Möglichkeiten der Bitmanipulation.
Referenz und Nachschlagewerk
Abgerundet wird das Buch durch zahlreiche Übungen, einen Lösungsteil, eine Syntax-Referenz und einen umfangreicher Index, damit Ihnen das Buch auch nach dem ersten Durcharbeiten als Referenz und Nachschlagewerk gute Dienste leisten kann.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 533
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Dirk Louis
C++
Das komplette Starterkit für den einfachen Einstieg in die Programmierung
2. Auflage
Der Autor:
Dirk Louis, Saarbrücken, [email protected]
Alle in diesem Buch enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht.
Ebenso übernehmen Autor und Verlag keine Gewähr dafür, dass beschriebene Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen und MarkenschutzGesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Bibliografische Information der Deutschen Nationalbibliothek: Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) – auch nicht für Zwecke der Unterrichtsgestaltung – reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.
© 2018 Carl Hanser Verlag Münchenwww.hanser-fachbuch.de
Lektorat: Brigitte Bauer-Schiewek Copyediting: Petra Kienle, Fürstenfeldbruck Umschlagdesign: Marc Müller-Bremer, München, www.rebranding.de Umschlagrealisation: Stephan Rönigk
Print-ISBN 978-3-446-44597-0 E-Book-ISBN 978-3-446-45388-3
Verwendete Schriften: SourceSansPro und SourceCodePro (Lizenz) CSS-Version: 1.0
Titelei
Impressum
Inhalt
Vorwort
Teil I – Grundkurs
1 Keine Angst vor C++!
1.1 Von C zu C++
1.1.1 Rückblick
1.1.2 Die strukturierte Programmierung
1.1.3 Chips sind billig, Programmierer teuer
1.1.4 Fassen wir zusammen
1.2 Von der Idee zum fertigen Programm
1.3 Näher hingeschaut: der C++-Compiler
1.3.1 Der Compiler ist ein strenger Lehrer
1.3.2 Definition und Deklaration
1.3.3 Das Konzept der Headerdateien
1.3.4 Namensräume
1.3.5 Der Compiler bei der Arbeit
1.3.6 ISO und die Compiler-Wahl
1.3.7 Der neue C++17-Standard
1.4 Übungen
2 Grundkurs: Das erste Programm
2.1 Hallo Welt! – das Programmgerüst
2.1.1 Typischer Programmaufbau
2.1.2 Die Eintrittsfunktion main()
2.1.3 Die Anweisungen
2.1.4 Headerdateien
2.1.5 Kommentare
2.2 Programmerstellung
2.2.1 Programmerstellung mit Visual Studio
2.2.2 Programmerstellung mit GNU-Compiler
2.2.3 Programmausführung
2.3 Stil
2.4 Übungen
3 Grundkurs: Daten und Variablen
3.1 Konstanten (Literale)
3.2 Variablen
3.2.1 Variablendefinition
3.2.2 Werte in Variablen speichern
3.2.3 Variablen bei der Definition initialisieren
3.2.4 Werte von Variablen abfragen
3.3 Konstante Variablen
3.4 Die Datentypen
3.4.1 Die Bedeutung des Datentyps
3.4.2 Die elementaren Datentypen
3.4.3 Weitere Datentypen
3.5 Typumwandlung
3.5.1 Typumwandlung bei der Ein- und Ausgabe
3.5.2 Automatische Typumwandlungen
3.5.3 Explizite Typumwandlungen
3.6 Übungen
4 Grundkurs: Operatoren und Ausdrücke
4.1 Rechenoperationen
4.1.1 Die arithmetischen Operatoren
4.1.2 Die mathematischen Funktionen
4.2 Ausdrücke
4.3 Die kombinierten Zuweisungen
4.4 Inkrement und Dekrement
4.5 Strings addieren
4.6 Weitere Operatoren
4.7 Übungen
5 Grundkurs: Kontrollstrukturen
5.1 Entscheidungen und Bedingungen
5.1.1 Bedingungen
5.1.2 Die Vergleichsoperatoren
5.1.3 Die logischen Operatoren
5.2 Verzweigungen
5.2.1 Die einfache if-Anweisung
5.2.2 Die if-else-Verzweigung
5.2.3 Die switch-Verzweigung
5.3 Schleifen
5.3.1 Die while-Schleife
5.3.2 Die do-while-Schleife
5.3.3 Die for-Schleife
5.3.4 Schleifen mit mehreren Schleifenvariablen
5.3.5 Performance-Tipps
5.4 Sprunganweisungen
5.4.1 Abbruchbefehle für Schleife
5.4.2 Abbruchbefehle für Funktionen
5.4.3 Sprünge mit goto
5.5 Fallstricke
5.5.1 Die leere Anweisung ;
5.5.2 Nebeneffekte in booleschen Ausdrücken
5.5.3 Dangling else-Problem
5.5.4 Endlosschleifen
5.6 Übungen
6 Grundkurs: Eigene Funktionen
6.1 Definition und Aufruf
6.1.1 Der Ort der Funktionsdefinition
6.1.2 Funktionsprototypen (Deklaration)
6.2 Rückgabewerte und Parameter
6.2.1 Rückgabewerte
6.2.2 Parameter
6.3 Lokale und globale Variablen
6.3.1 Lokale Variablen
6.3.2 Globale Variablen
6.3.3 Gültigkeitsbereiche und Verdeckung
6.4 Funktionen und der Stack
6.5 Überladung
6.6 Übungen
7 Grundkurs: Eigene Datentypen
7.1 Arrays
7.1.1 Definition
7.1.2 Auf Array-Elemente zugreifen
7.1.3 Initialisierung
7.1.4 Arrays in Schleifen durchlaufen
7.1.5 Arrays an Funktionen übergeben
7.1.6 Mehrdimensionale Arrays
7.1.7 Vor- und Nachteile der Programmierung mit Arrays
7.2 Aufzählungen
7.2.1 Definition
7.2.2 Variablen
7.2.3 Aufzählungstypen und switch-Verzweigungen
7.2.4 Die neuen enum class-Aufzählungen
7.3 Strukturen
7.3.1 Definition
7.3.2 Variablendefinition
7.3.3 Zugriff auf Elemente
7.3.4 Initialisierung
7.3.5 Arrays von Strukturen
7.4 Klassen
7.4.1 Definition
7.4.2 Variablen, Objekte und Konstruktoren
7.4.3 Zugriffsschutz
7.5 Übungen
8 Grundkurs: Zeiger und Referenzen
8.1 Zeiger
8.1.1 Definition
8.1.2 Initialisierung
8.1.3 Dereferenzierung
8.1.4 Zeigerarithmetik
8.2 Referenzen
8.3 Einsatzgebiete
8.3.1 call by reference
8.3.2 Dynamische Speicherreservierung
8.4 Übungen
9 Grundkurs: Noch ein paar Tipps
9.1 Wie gehe ich neue Programme an?
9.2 Wo finde ich Hilfe?
9.2.1 Hilfe zu Compiler-Meldungen
9.2.2 Hilfe bei der Lösung von Programmieraufgaben
9.2.3 Hilfe bei Programmen, die nicht richtig funktionieren
9.2.4 Debuggen
9.3 Programme optimieren
Teil II – Aufbaukurs: die Standardbibliothek
10 Aufbaukurs: Einführung
10.1 Bibliotheken verwenden
10.2 Hilfe zu den Bibliothekselementen
11 Aufbaukurs: Mathematische Funktionen
11.1 Die mathematischen Funktionen
11.1.1 Mathematische Konstanten
11.1.2 Verwendung der trigonometrischen Funktionen
11.1.3 Überläufe
11.2 Zufallszahlen
11.3 Komplexe Zahlen
11.4 Übungen
12 Aufbaukurs: Strings
12.1 String-Literale
12.1.1 Escape-Sequenzen
12.1.2 Zeilenumbrüche
12.2 Strings erzeugen
12.3 Strings aneinanderhängen
12.4 Strings vergleichen
12.5 Sonstige String-Manipulationen
12.6 C-Strings
12.7 Umwandlungen zwischen Strings und Zahlen
12.8 Übungen
13 Aufbaukurs: Ein- und Ausgabe
13.1 Daten auf die Konsole ausgeben
13.2 Formatierte Ausgabe
13.2.1 Ausgabebreite
13.2.2 Füllzeichen
13.2.3 Genauigkeit
13.2.4 Formatierte Ausgabe mit printf()
13.3 Deutsche Umlaute
13.4 Daten über die Konsole (Tastatur) einlesen
13.5 Fehlerbehandlung
13.6 Streams
13.7 Textdateien
13.7.1 In Textdateien schreiben
13.7.2 Aus Textdateien lesen
13.8 Binärdateien
13.9 Übungen
14 Aufbaukurs: Zeit und Datum
14.1 Zeit und Datum
14.2 Laufzeitmessungen
14.3 Übungen
15 Aufbaukurs: Container
15.1 Die STL
15.2 vector – ein intelligenter Daten-Container
15.2.1 Einsatz eines Containers
15.2.2 Größenmanagement von Containern
15.2.3 Typische Memberfunktionen
15.3 Der Gebrauch von Iteratoren
15.4 Die Algorithmen
15.4.1 generate()
15.4.2 stable_sort()
15.5 Schlüssel/Wert-Paare
15.6 Übungen
16 Aufbaukurs: Programme aus mehreren Quelltextdateien
16.1 Quelltext verteilen
16.1.1 Funktionen über Dateigrenzen hinweg verwenden
16.1.2 Klassen über Dateigrenzen hinweg verwenden
16.1.3 Variablen über Dateigrenzen hinweg verwenden
16.1.4 Typdefinitionen über Dateigrenzen hinweg verwenden
16.2 Mehrfacheinkopieren von Headerdateien verhindern
16.3 Übungen
Teil III – Objektorientierte Programmierung
17 OOP-Kurs: Klassen
17.1 Objektorientiert denken – objektorientiert programmieren
17.1.1 Objektorientiertes Programmieren
17.1.2 Wie sind Objekte beschaffen?
17.1.3 Wie findet man einen objektorientierten Lösungsansatz?
17.1.4 Objekte und Klassen
17.2 Klassendefinition
17.2.1 Zugriffsrechte
17.2.2 Quelltext- und Headerdatei
17.2.3 Klassen zu Visual-Studio-Projekten hinzufügen
17.3 Membervariablen
17.3.1 Anfangswerte
17.3.2 Private-Deklaration
17.3.3 Eingebettete Objekte
17.3.4 Konstante Membervariablen
17.3.5 Statische Membervariablen
17.4 Memberfunktionen
17.4.1 Definition innerhalb der Klassendefinition
17.4.2 Definition außerhalb der Klassendefinition
17.4.3 Der this-Zeiger
17.4.4 Statische Memberfunktionen
17.4.5 Konstante Memberfunktionen
17.4.6 Get-/Set-Memberfunktionen
17.5 Die Konstruktoren
17.5.1 Definition und Aufruf
17.5.2 Ersatz- und Standardkonstruktoren
17.6 Der Destruktor
17.7 Übungen
18 OOP-Kurs: Vererbung
18.1 Das Prinzip der Vererbung
18.1.1 Der grundlegende Mechanismus
18.1.2 Die Syntax
18.1.3 Wann ist Vererbung gerechtfertigt?
18.1.4 Einige wichtige Fakten
18.2 Das Basisklassenunterobjekt
18.2.1 Zugriff
18.2.2 Instanzbildung
18.3 Die Zugriffsspezifizierer für die Vererbung
18.4 Verdecken, überschreiben und überladen
18.4.1 Verdeckung
18.4.2 Überladung
18.4.3 Überschreibung
18.5 Der Destruktor
18.6 Mehrfachvererbung
18.7 Übungen
19 OOP-Kurs: Polymorphie
19.1 Grundprinzip und Implementierung
19.2 Späte und frühe Bindung
19.2.1 Frühe Bindung
19.2.2 Späte Bindung
19.3 Generische Programmierung
19.3.1 Basisklassen-Arrays
19.3.2 Basisklassenparameter
19.4 Typidentifizierung zur Laufzeit (RTTI)
19.4.1 Umwandlung mit dynamic_cast
19.4.2 Der typeid()-Operator
19.5 Abstrakte Klassen
19.5.1 Rein virtuelle Funktionen
19.5.2 Abstrakte Klassen
19.6 Übungen
20 OOP-Kurs: Ausnahmebehandlung
20.1 Fehlerprüfung mit Ausnahmen
20.2 Ausnahmen abfangen
20.3 Ausnahmen auslösen
20.4 Programmfluss und Ausnahmebehandlung
20.4.1 Wo wird der Programmfluss nach einer Ausnahme fortgesetzt?
20.4.2 Die Problematik des gestörten Programmflusses
20.5 Übungen
Teil IV – Profikurs
21 Profikurs: Allgemeine Techniken
21.1 Vorzeichen und Überlauf
21.2 Arithmetische Konvertierungen
21.3 Lokale static-Variablen
21.4 Der ?:-Operator
21.5 Bit-Operatoren
21.5.1 Multiplikation mit 2
21.5.2 Division durch 2
21.5.3 Klein- und Großschreibung
21.5.4 Flags umschalten
21.5.5 Gerade Zahlen erkennen
21.6 Zeiger auf Funktionen
21.7 Rekursion
21.8 constexpr-Funktionen
21.9 Variablendefinition in if und switch
22 Profikurs: Objektorientierte Techniken
22.1 Zeiger auf Memberfunktionen
22.2 Friends
22.3 Überladung von Operatoren
22.3.1 Syntax
22.3.2 Überladung des Inkrement-Operators ++
22.3.3 Überladung arithmetischer Operatoren +, +=
22.3.4 Überladung der Streamoperatoren <<>>
22.4 Objekte vergleichen
22.4.1 Gleichheit
22.4.2 Größenvergleiche
22.5 Objekte kopieren
23 Profikurs: Gültigkeitsbereiche und Lebensdauer
24 Profikurs: Templates
24.1 Funktionen-Templates
24.2 Klassen-Templates
25 Profikurs: Reguläre Ausdrücke
25.1 Syntax regulärer Ausdrücke
25.1.1 Zeichen und Zeichenklassen
25.1.2 Quantifizierer
25.1.3 Gruppierung
25.1.4 Assertionen (Anker)
25.2 Musterabgleich mit regulären Ausdrücken
25.3 Suchen mit regulären Ausdrücken
25.4 Ersetzen mit regulären Ausdrücken
26 Profikurs: Lambda-Ausdrücke
26.1 Syntax
26.2 Einsatz
Anhang A: Lösungen
Anhang B: Die Beispiele zum Buch
B.1 Installation der Visual Studio Community Edition
B.2 Ausführung der Beispielprogramme
B.2.1 Ausführung mit VS Community Edition 2017
B.2.2 Ausführung mit beliebigen integrierten Entwicklungsumgebungen
B.2.3 Ausführung mit GNU-Konsolen-Compiler
Anhang C: Zeichensätze
C.1 Der ASCII-Zeichensatz
C.2 Der ANSI-Zeichensatz
Anhang D: Syntaxreferenz
D.1 Schlüsselwörter
D.2 Elementare Typen
D.3 Strings
D.4 Operatoren
D.5 Ablaufsteuerung
D.6 Ausnahmebehandlung
D.7 Aufzählungen
D.7.1 enum
D.7.2 enum class (C++11)
D.8 Arrays
D.9 Zeiger
D.10 Strukturen
D.11 Klassen
D.12 Vererbung
D.13 Namensräume
Anhang E: Die Standardbibliothek
E.1 Die C-Standardbibliothek
E.2 Die C++-Standardbibliothek
Sie besitzen einen Computer und wissen nicht, wie man programmiert?
Das ist ja furchtbar! Jetzt erzählen Sie mir nur nicht, dass Sie Ihren Computer nur zum Spielen und Internetsurfen benutzen. Dann wäre ich wirklich enttäuscht.
Ach so, jemand hat Ihnen erzählt, dass Programmieren sehr kompliziert sei und viel mit Mathematik zu tun hätte.
Tja, dann wollte sich dieser jemand wohl ein wenig wichtigmachen oder hat selbst nichts vom Programmieren verstanden, denn Programmieren ist nicht schwieriger als Kochen oder das Erlernen einer Fremdsprache. Und mehr mathematisches Verständnis als es von einem Schüler der sechsten oder siebten Klasse verlangt wird, ist definitiv auch nicht nötig.
Reizen würde Sie das Programmieren schon, aber Sie wissen ja gar nicht so recht, was Sie programmieren könnten.
Keine Angst, sowie Sie mit dem Programmieren anfangen, werden Ihnen zahlreiche Ideen kommen. Und weitere Anregungen finden sich in guten Lehrbüchern zuhauf beziehungsweise ergeben sich beim Austausch mit anderen Programmierern.
Immer noch Zweifel? Sie würden sich das Programmieren am liebsten im Selbststudium beibringen? Sie suchen ein Buch, das Sie nicht überfordert, mit dem Sie aber dennoch richtig professionell programmieren lernen?
Aha, Sie sind der unsicher-anspruchsvolle Typ! Dann dürfte das vorliegende Buch genau richtig für Sie sein. Es ist nicht wie andere Bücher primär thematisch gegliedert, sondern in Stufen – genauer gesagt vier Stufen, die Sie Schritt für Schritt auf ein immer höheres Niveau heben.
Aufbau des Buchs
Die erste Stufe ist der Grundkurs. Hier schreiben Sie Ihre ersten Programme und lernen die Grundzüge der Programmierung kennen. Danach besitzen Sie fundiertes Basiswissen und können eigenständig Ihre ersten Programmideen verwirklichen.
Bestimmte Aufgaben kehren bei der Programmierung immer wieder: beispielsweise das Abfragen des Datums, die Berechnung trigonometrischer Funktionen, die Verwaltung größerer Datenmengen oder das Schreiben und Lesen von Dateien. Für diese Aufgaben gibt es in der C++-Standardbibliothek vordefinierte Elemente. Wie Sie diese nutzen, erfahren Sie im Aufbaukurs – der zweiten Stufe.
Die dritte Stufe stellt Ihnen die objektorientierte Programmierung vor und lehrt Sie, wie Sie den Code immer größerer Programme sinnvoll organisieren.
Die vierte Stufe schließlich stellt Ihnen noch einige letzte C++-Techniken vor, die Sie vermutlich eher selten einsetzen werden, die ein professioneller C++-Programmierer aber kennen sollte.
Abgerundet wird das Buch durch einen umfangreichen Anhang, der unter anderem eine C++-Syntaxübersicht und eine Kurzreferenz der Standardbibliothek beinhaltet.
Nicht verzagen!
Natürlich gibt es auch Zeiten des Verdrusses und des Frusts. Oh ja, die gibt es! Aber seien wir ehrlich: Wäre der Weg nicht so steinig, wäre die Freude am Ziel auch nicht so groß. Was sind das denn für trostlose Gesellen, die in ihrer gesamten Zeit als Programmierer noch keine Nacht durchwacht haben, weil sie den Fehler, der das Programm immer zum Abstürzen bringt, nicht finden konnten? Und was soll man von einem Programmierer halten, der noch nie aus Versehen ein Semikolon hinter eine if-Bedingung gesetzt hat? (Und dem die Schamesröte ins Gesicht schoss, als er einen vorbeikommenden Kollegen um Hilfe bat und ihn dieser nach einem flüchtigen Blick auf den Quellcode auf den Fehler aufmerksam machte.) Sind das überhaupt echte Programmierer?
Wer programmieren lernen will, der muss auch erkennen, dass bei der Programmierung nicht immer alles glatt geht. Das ist nicht ehrenrührig, man darf sich nur nicht unterkriegen lassen. Sollten Sie also irgendwo auf Schwierigkeiten stoßen – sei es, dass Sie etwas nicht ganz verstanden haben oder ein Programm nicht zum Laufen bekommen –, versuchen Sie sich nicht zu sehr in das Problem zu verbohren. Legen Sie eine kleine Pause ein oder lesen Sie erst einmal ein wenig weiter – oftmals klärt sich das Problem danach von selbst.
Dirk Louis
Saarbrücken, im Frühjahr 2018
In diesem Teil erlernen Sie die Grundlagen von C++ und der Programmierung im Allgemeinen.
Das bedeutet, dass wir eine Menge Stoff zu bewältigen haben. Doch wir werden es gelassen angehen. Zuerst eigenen wir uns ein wenig Theorie an, anschließend betrachten wir die technische Seite der Programmerstellung und ab Kapitel 3 tauchen wir dann so richtig in die C++-Programmierung ein.
1 eine Funktion, die einen Funktionszeiger als Rückgabetyp besitzt
2 Moderne "Interpreter", wie sie beispielsweise für die Ausführung von Java-, C#- oder .NET-C++-Programmen verwendet werden, interpretieren daher vorkompilierte Programme und nennen sich JIT-Compiler (= "Just in time"-Compiler), weil sie die Programmausführung kaum verzögern.
3Einige objektorientierte Sprachen erlauben auch die direkte Definition von Objekten oder benutzen andere Begriffe, um die verschiedenen OOP-Konzepte zu bezeichnen.
4 Sollten Sie die "Bürgschaft" noch nicht gelesen haben, holen Sie dies unbedingt nach. Programmieren ist ein Spaß, humanistische Bildung eine Muss.
5 Tatsächlich ist jeder gute C++-Compiler auch in der Lage, (nahezu) beliebigen C-Code zu übersetzen. (Es gibt nur ganz wenige Punkte, in denen C++ die von C übernommene Syntax und Semantik verändert hat.) Umgekehrt gab es in der Übergangszeit – und gibt es wohl auch heute noch – nicht wenige Programmierer, die in C++ mehr oder weniger guten, alten C-Code schrieben.
6Vermutlich wird Ihnen dieser Code vollkommen unverständlich erscheinen. Machen Sie sich darüber keine Gedanken. Zum einen ist der Code schon recht komplex, zum anderen geht es hier ja nicht darum, dass Sie das Beispiel nachstellen, sondern nur darum, dass Sie einmal einen C++-Quelltext gesehen haben.
7 Insbesondere Microsoft tendierte früher dazu, die verschiedenen Programmiersprachen, für die das Softwarehaus Compiler anbietet, um neue und abweichende Syntaxformen zu erweitern, die dann ausschließlich von den passenden Microsoft-Compilern verstanden und unterstützt werden. Angeblich dient dies alles dazu, dem Programmierer die Arbeit zu erleichtern, faktisch bindet es den Programmierer aber vor allem an einen einzelnen Compiler.
8 Kombination aus Prozessor und Betriebssystem.