Diese Seite ist gedacht für Autoren des Tutorials und soll für die Koordination der Arbeit dienen. \\ Die Diskussion zum Inhalt des Tutorials findet derzeit auf dieser Seite statt: http://forum.proggen.org/viewtopic.php?f=39&t=480 ===== Todo ==== ===== Vorläufiger Index ===== Nach der Diskussion auf der erwähnten Seite sieht der vorläufige Index wie folgt aus. ==== 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: === * 1a) 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) * 1b) Einstieg * Wie dieses Tutorial zu lesen ist? * Was ist ein Programm? * Grundlegendes 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 * C- Strings, std::string (light version) ==== Block 2: Vertiefung ==== === Theorieblock 2a === Optional (Exkurs) * Hardware * Stack (Funktionsaufrufe) * Funktionsweise der CPU === Theorieblock 2b === * Formatieren von Programmcode * Kommentieren von Programmcode * "good practice", Konventionen * const correctness (light) * Wiederverwendbarkeit (light Version) (Redundanzen vermeiden) === Praxis 2a === * Referenzen * Zeiger * Funktionen * Funktionsüberladung * 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 * Polymorphie * Mehrfachvererbung * Exceptions === Theorieblock 2d === Optional (Exkurs) * 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) ---- Der Index ab hier ist eine reine Ideensammlung, und noch völlig Zukunftsmusik. ==== 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 * ... ---- Selbstverständlich sollte der Index verändert und angepasst werden, falls es nötig wird.