Grundlagen der C++-Programmierung

Die Vorlesung Grundlagen der C++-Programmierung findet jeweils im Sommersemester statt und bietet einen Einstieg in die Programmierung mit C++. Dabei gehen wir von Programmiererfahrung mit Java aus!

Mein Kollege Thomas Wilde hat die Grundlagen der C++ Programmierung auch formal übernommen. Ab 2023 wird die Vorlesung im Wintersemester statt im Sommer angeboten. Ich werde mich weiter um den Webdienst und das Backend kümmern.

Inhalt

Hier ist ein grober Überblick der Vorlesung:

  • Der Build-Prozess: Compiler, Linker, build tool
  • Gemeinsamkeiten und Unterschiede zu Java
  • Datentypen, Felder, Zeiger, dynamischer Speicher
  • Klassen
    • Methoden & Member-Variablen
    • Zugriffskontrolle”
    • Speicher-Layout
    • Konstruktoren & Destruktoren
  • Referenzen, const-heit, const-Korrektheit
  • Namespaces & enums
  • Mehr zu Klassen
    • Default-Konstruktoren
    • Copy-Konstruktor, copy-assignmentrule-of-3
    • Speicherverwaltung
    • Operatoren überladen
    • Polymorphismus: virtual Vererbung
  • Generische Programmierung mit einfachen templates
  • Einführung in die Standardbibliothek
  • Smart-Pointer: shared_ptr<> & unique_ptr<>
  • Spezialisierung & templates für Fortgeschrittene
  • Funktoren & Lambdas und Funktionszeiger
  • Ausnahmebehandlung: exceptions
  • Debugging-Techniken
  • Erzeugung und Benutzen von Bibliotheken

Wir benötigen einige Werkzeuge, und anders als für Java bekommen wir typischerweise nicht alles “aus einer Hand”.

Wir empfehlen den GNU GCC oder Clang Compiler samt tool chain. Und wir geben in der Vorlesung eine Einführung zu CMake, um den Build-Prozess zu automatisieren.

Außerdem verwenden wir z.B. Valgrind, um Fehler schnell und zuverlässig zu erkennen. Typischerweise sind das Speicherfehler, die sonst vielleicht gar nicht auffallen und die wir so von Java nicht kennen – weil sie dort schlicht nicht auftreten können. (An dieser Stelle sei Dir GNU/Linux ans Herz gelegt!)

Wir werden in der Vorlesung immer wieder auf die C++ Core Guidelines – eine aktuelle Sammlung von best practices – hinweisen.

Team

Viele Leute haben Anteil am Gelingen dieser Vorlesung! An dieser Stelle mein Dank an alle!

Ich halte die Vorlesung zusammen mit Kollegen. In der Regel werde ich im Hintergrund bleiben und den kleineren Teil der Vorlesungen übernehmen, denn für mich bleiben auch noch die Algorithmen und Datenstrukturen und Mesh Processing.

Verantwortlich & Teile der Vorlesung Thomas Wilde (seit 2023)
Vorlesung Thomas Wilde, siehe Vorlesungsseite
Übungsleiter NN, siehe Vorlesungsseite

Organisation

Wir erwarten 50 – 100 Teilnehmer. Je nach Anzahl der verfügbaren Übungstermine müssen wir uns vorbehalten, die Teilnehmerzahl zu beschränken.

Die Vorlesung ist eine Einführung in die C++-Programmierung. – Aber sie richtet sich nicht an Programmieranfänger! Voraussetzung sind gute Programmierkenntnisse in Java. Wir behalten uns vor, diese abzufragen.

Vorlesungsseite

Wir verwenden für die Vorlesung einen eigenen Dienst

https://vcxx.cs.ovgu.de,

der nur während der Vorlesungszeit und nur für das jeweilige Semester zur Verfügung steht. Dort findest Du nach der Anmeldung alle Materialien zur Vorlesung, und dort kannst Du Deine Lösungen zu den Übungsaufgaben elektronisch einreichen.

Näheres dazu besprechen wir jeweils in der ersten Vorlesung.

Aus Gründen des Datenschutzes löschen wir Vorlesungsdaten und insbesondere Zugangsdaten nach jedem Semester. – Deshalb ist für jedes Semester eine neue Anmeldung nötig. Der Zugang z.B. aus EinfInf oder AuD funktioniert nicht mehr!

Überblick

Semesterwochenstunden 2h Vorlesung + 2h Übung
Voraussetzungen Programmiererfdahrung in Java
z.B. aus EinfInf und AuD (beide ampfohlen)
empfohlenes Semester >2
offizielle Termine und Angaben bitte im LSF suchen
(Es ist leider kein permanenter Link möglich.)

Nützliche Hinweise

Literatur

Wir geben auf der Vorlesungsseite einige Bücher und eine Vielzahl von Online-Quellen an. Meist geht es dabei um ein bestimmtes Thema oder z.B. eine Regel aus den C++ Core Guidelines.

Da wir die Liste immer wieder aktualisieren, verzichten wir hier auf eine Aufstellung.

Die Vorlesungsmaterialien selbst sind auf deutsch, die angegebene Literatur ist i.d.R. auf englisch.

Compiler & Tools

Vielleicht willst Du schon vorab das eine oder andere installieren. In jedem Fall solltest Du mit Deinem Betriebssystem – egal welches – umgehen können (z.B. Wie installiere ich …?)

  • GNU GCC und Clang sind freie und sehr gute C++-Compiler
  • Matt Godbolt’s Compiler Explorer zeigt Dir, was verschiedene Compiler erzeugen
  • CMake ist ein meta-build tool, das z.B. ein Makefile für GNU Make erstellt, das wiederum den Build-Prozess definiert
  • Wir empfehlen derzeit Visual Studio Code als Editor und Entwicklungsumgebung (für GNU Linux, maxOS und Windows).
    Ich selbst bevorzuge GNU Emacs mit einigen Erweiterungen, andere bevorzugen Vim, … – Letztendlich ist es egal. Such Dir aus, was Dir am besten gefällt!
  • Valgrind hilft Dir, “versteckte” Fehler zu entdecken (nur  GNU/Linux)