----- Folgendes ist eine Gliederung, wie ein C++-Tutorial aufgebaut werden könnte: ===== Block 1: Der Anfang ====== Dieser Block sollte einen einfachen Einstieg für Programmieranfänger darstellen und ihnen ermöglichen simple Programme zu schreiben. ==== Theorieblock 1 ==== === Vorbereitung === * Wieso programmieren Lernen? * Was ist ein Computer? (jetziges c:what) * Was bedeutet Programmieren? (jetziges c:what) * Wie programmieren Lernen? (ähnlich wie c:how) * Wie gehe ich mit Fehlern um? * Wieso C++? (teile von cpp:introduction, ähnlich wie c:why) * Fragen und Antworten zu C++ (teile von cpp:introduction) === Einstieg === * Wie dieses Tutorial zu lesen ist? * Was ist ein Programm? * Grundelegendes zum Speicher (jetziges c:hardware:ram) ==== Praxis 1 ==== * Installation und Einrichtung der Software (c:software, c:compiler:start) * Hello World Programm \\ Das Hello World programm sollte weniger als Tatsächliches lernen der Sprache gelten, sondern eher dem Testen der Software und Einführung eines "Programmgerüstes" dienen. * Ausdrücke * Operatoren * Klammern * Literale (light Version) * Anweisungen *Wo können sie stehen? * Ausgabe (light Version) * Eingabe (very very light Version) * Datentypen (light) * Variablen, Literale (heavy version) * Schleifen und Verzweigungen * Arrays, evtl. C- Strings ==== Block 2: Vertiefung ==== === Theorieblock 2a === * Hardware * Stack (funktionsaufrufe) * Funktionsweise der CPU === Theorieblock 2b === * Formattieren von Programmcode * Kommentieren von Programmcode * "good practice", Konventionen * const correctness * Wiederverwendbarkeit (light Version) (redundanzen vermeiden) === Praxis 2a === * Referenzen * Zeiger * Funktionen * Namespaces * Datentypen (heavy version) * Strukturen (structs) * Gültigkeitsbereiche (sichtbarkeiten von bezeichnern) * Präprozessor * Headerdateien und Aufspaltung des Codes auf mehrere Dateien === Theorieblock 2c === * Objektorientiertes Programmieren * Lebenszeitabhängiges Programmieren (Konstruktor, Destruktor) * Idee der Kapselung * Idee der Vererbung * Aufbau von Bibliotheken === Praxis 2b === * Klassen und Objekte * Konstruktor * Destruktor * Operatorüberladung * Ein/Ausgabe (medium Version) * Strings (std::string) * Vererbung * Virtuelle Funktionen * Exceptions === Theorieblock 2d === * Umsetzung von Praxis 2b) auf der Hardware * Name Mangling ==== Block 3: Fortgeschrittene Themen ==== === Theorieblock 3 === * Generische Programmierung * Wiederverwendbarkeit (heavy version) === Praxis 3 === * Funktionstemplates * Klassentemplates * Ein/Ausgabe (heavy Version) * Die iostream Klassenhierarchie * Template- Templates * Algorithmen * Datenstrukturen * STL * Vorstellung * Anwendung * Container * Algorithmen * Eigene Algorithmen im Stil der STL * Runtime Type Information (RTTI) so, ab hier wirds ein bisschen Schwammig. Liegt ja auch in Ferner zukunft. Aber ich werde es trotzdem versuchen, das weiter zu formulieren. ==== Block 4: Angewandtes C++ ==== === Theorieblock 4 === * Portabilität * Arbeiten mit dem Standard * Ganz viel Theorie :-) * Designmuster * z.B.: \\ Singleton Klassen \\ Curriously Recurring Template Pattern \\ Type Traits \\ Expression Templates * Eventbasiertes Programmieren * Vorstellung der Boost Bibliothek * Vorstellung eines GUI Toolkits * Multithreading ==== Block 5: Das neue C++ ==== Einführung in die Features von C++0x === Praxis 5a: Features === * Compilerunterstützung * "Bugfixes" der Sprache * auto und decltype * variadic templates * initializer lists * Das neue NULL * Const Expressions * Concepts ==== Praxis 5b: Die neue Standardbibliothek ==== ...