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