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. Ich werde mich weiter um den Webdienst und das Backend kümmern. Aktuell wird die Vorlesung im Sommersemester angeboten.
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-assignment, rule-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
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)