====== Hello C++ World! ====== Willkommen zu unserem C++ Tutorial, wir sind froh, dass ihr euch dazu entschieden habt C++ mit proggen.org zu lernen :-)\\ Ihr habt eine gute Wahl getroffen. Wie gut, werdet ihr in der [[cpp:introduction|Einleitung]] und im Verlauf eurer "Programmiererkarriere" noch bemerken. Um zu beginnen, lest euch die [[cpp:introduction|Einleitung]] durch und arbeitet euch langsam Artikel für Artikel vor.\\ ===== Voraussetzungen ===== Dieses Tutorial baut auf dem vorhandenen [[c:start|C-Tutorial]] auf. Das bedeutet, dass hier davon ausgegangen wird, dass die C-Grundlagen bekannt sind. Dazu gehören die [[c:type:start|C-Datentypen]] und wie dazugehörige [[c:var:start|Variablen]] und [[c:attr:const|Konstanten]] erzeugt werden, wie [[c:expr:start|Ausdrücke]] formuliert werden, [[c:if|Bedingungen]] und [[c:loops:start|Schleifen]] und [[c:switch]], sowie weiterhin bekannt sein muss, wie [[c:func:start|Funktionen]] deklariert, definiert und aufgerufen werden. Dies sollte soweit sicher sein, um hier weiter aufzubauen. Ansonsten gilt: "In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg.", so der C++-Erfinder Bjarne Stroustrup. In diesem Sinne - viel Spaß :-) ===== Einleitung ===== * [[cpp:introduction|Einleitung]] * [[cpp:helloworld|Hello World! Das erste Programm]] ===== Grundlagen ====== * Neue [[cpp:operator:start|Operatoren]]: Speicher anfordern und freigeben mit [[cpp:new|new und delete]] * [[cpp:var:init|Initialisieren von Variablen]] * [[cpp:type:start|Neue Datentypen]] * [[cpp:defaultparams|Default Parameter]] * [[cpp:cast:why|Neue Casts]] * [[cpp:cast:static|Statische Casts]] ===== Klassenbasiertes Programmieren ====== * [[cpp:class:start|Was ist klassenbasiertes Programmieren?]] * [[cpp:class:def|Wie definiert man eine Klasse]] * [[cpp:class:member|Was ist ein Member?]] - Variablen, Methoden und statische Funktionen * [[cpp:class:this|Der this-Pointer]] - Der Zeiger auf sich selbst * [[cpp:class:static|Statische Member]] * [[cpp:class:construct|Konstruktoren]] * [[cpp:cast:construct|Casten durch Umformen]] * [[cpp:class:init|Die Initialisierungsliste]] * [[cpp:class:private|Kapselung]]: Member verstecken (Information Hiding) * [[cpp:class:destruct|Destruktoren]] * [[cpp:class:inline|Was ist eine inline Methode?]] ===== Referenzen ====== * [[cpp:ref:start|Was sind Referenzen?]] * Anwendungsfälle und Beispiele * [[cpp:ref:parameter|Referenzen als Funktionsparameter]] * [[cpp:ref:member|Referenzen als Membervariablen]] * [[cpp:ref:new|dynamisch Referenzen erzeugen]] ===== Vererbung ===== * [[cpp:inheritance:start|Die Spielregeln zum Ableiten]] * [[cpp:inheritance:def|Basiskonstruktoren rufen]] * [[cpp:inheritance:overwrite|Überschreiben]] * [[cpp:inheritance:multiple|Mehrfachableitungen]] * [[cpp:inheritance:using|Gleichnaminge Member in zwei Basisklassen]] * [[cpp:inheritance:diamond|Das Diamant-Problem]] * [[cpp:inheritance:virtual|virtuelle Ableitungen]] ===== Überladen ===== * [[cpp:overload:start|Funktionen und Methoden überladen]] * [[cpp:overload:using|Überladene Funktionen in den Namensraum zurückholen]] * [[cpp:operator:overload|Operatorüberladung]] ===== Namensräume ===== * [[cpp:namespace:start|Einführung]] * [[cpp:namespace:Definition]] eines Namensraum * [[cpp:namespace:access|Zugriff]] auf Elemente eines Namensraums * [[cpp:namespace:using|Namensräume einbinden]] oder einzelne Elemente aus einem Namensraum einbinden ===== Const-Correctness ===== * [[cpp:const:start|Was ist Const-Correctness?]] * [[cpp:const:arguments|Const-Argumente]] * [[cpp:const:def|Const-Methoden]] * Veränderbar, trotz Const: [[cpp:const:mutable|mutable]] * Brecheisen für alte Quelltexte: [[cpp:cast:const|Const-Casts]] ===== Objektorientierte Programmierung ===== * [[cpp:oop:explanation|Was ist objektorientierte Programmierung?]] * [[cpp:oop:funcptr|Objektorientierung über Funktionspointer]] * [[cpp:oop:vtable|Objekttyp-orientierte Programmierung]] * [[cpp:oop:slicing|Probleme bei CallByValue-Aufrufen]] (Slicing) * [[cpp:oop:virtual|virtuelle Methoden]] Objekttyporientierte Programmierung mit C++ * [[cpp:oop:destruct|virtuelle Destruktoren]] Objekttyporientierter Abbau von Objekten * [[cpp:oop:interface|Interfaces]] (Pure virtual methods) ==== Laufzeit-Typ-Informationen ==== * [[cpp:oop:rtti|Run-Time-Type-Information]] (RTTI) * [[cpp:cast:dynamic|Dynamische Casts]] ===== Weitere Verwendung von Klassen ===== * [[cpp:class:functor|Funktor]] * [[cpp:class:PrePost|Prä- und Post-Funktionen]] ===== Generische Programmierung ===== * [[cpp:template:start|Was sind Templates?]] * [[cpp:template:func|Template-Funktionen]] * [[cpp:template:class|Template-Klassen]] * [[cpp:template:template|Template-Templates]] * [[cpp:template:meta|Meta-Programmierung]] ===== Hacking ===== * [[cpp:cast:reinterpret|Reinterpretierende Casts]] * [[cpp:article:placementnew|Placement New]]