Best Practice für die Verwendung von throw und catch
Standard-Exceptions als Basisklasse
Exceptions und std::terminate
Wann noexcept und wann nicht?
std::move und std::move_if_noexcept
Typ-Kontrolle und -Umwandlungen
Vor- und Nachteile statischer Typisierung
Typabhängige Auswahl von Operationen
Schlüsselwortbasierte Cast-Syntax
Statische und dynamische Umwandlungen
Compilezeit-Typ vs. Laufzeit-Typ und RTTI
Typ-Anpassung durch Konstruktor
Typ-Anpassung durch type-cast-Funktion
Typsichere Operator-Überladungen
Aufrufbarer Code (Callables)
Funktionen in C und C++
Argumente und Rückgabewerte (teils Wiederholung)
Funktionszeiger und Member-Funktionszeiger
Aufrufbare Objekte (aka. Funktoren)
Lambda-Funktionen und Capture-Listen
Type erasure mittels std::function
std::bind durch Lambda ersetzen
Realisierung von Callbacks über Interfaces
Dynamisch allokierter Speicher
Zeiger vs. Referenzen (auf Wunsch kurze Wiederholung)
Direkte Verwendung von new und delete
std::unique_ptr (exklusive Eigentümerschaft)
std::shared_ptr (geteilte Eigentümerschaft)
std::shared_from_this (Eigentümerkreis erweitern)
std::weak_ptr (fremde Eigentümerschaft)
Custom Deleter für std::unique_ptr
Custom Deleter für std::shared_ptr
Typ-Umwandlungen zwischen Smart-Pointern
Standard Template Library
Kurze Wiederholung zum STL-Design (nur auf Wunsch)
Flexibilität durch Trennung von Containern und Iteratoren
Algorithmen-Überblick (C++98, C++11, C++14 )
std::tuple und Structured Binding
std::optional, std::any, std::variant
Praktische Metaprogrammierung
Laufzeit-Code vs. Compilezeit-Code
constexpr, consteval und constinit
Templates als Compilezeit-Funktionen
Standard Type-Trait Templates
Type-Trait basierte Argumenttypen
Type-Trait basiertes Überladen
C++20 Konzepte
Multithreading
Kurze Einführung zu Threads (nur auf Wunsch)
Asynchrone Funktionsaufrufe
Threadübergreifendes Exception Handling
Grundlegende Bausteine Promise und Future
Thread-Pools mit Packaged Task
Synchronisierung mittels Mutex
Deadlocks und Race-Conditions
Mutex sicher entsperren (RAII-Idiom)
Atomic Datentypen
Erweiterte Verhaltensgarantien
Atomares Setzen und Testen
Nutzung Lock-freier Algorithmen
Race-Conditions bei Smart-Pointer
Automatisch synchronisierte Streams
Gewichtung nach Teilnehmer-Interesse
Bedingt durch den Stoffumfang der Sprache C++ und der zugehörigen Standardbibliothek können nicht alle Themengebiete in gleicher Ausführlichkeit behandelt werden. Da alle Punkte aber zumindest einmalangesprochen werden, kann der Teilnehmerkreis insgesamt die weitere Behandlung steuern. Sofern für einzelne Punkte ein besonderes Interesse erkennbar ist, werden diese gezielt vertieft.
Praktische Übungen
Das neu gewonnene Wissen wird in praktischen Programmierübungen vertieft.
Der Umfang und die Anzahl der Übungen richten sich nach dem Interesse der Teilnehmenden.
MicroConsult Plus:
Sie erhalten von uns Ihre Übungsverzeichnisse und Lösungsbeispiele für alle Übungsaufgaben.
Sie bekommen alle C++ Beispiele in elektronischer, kompilierbarer Form und können diese sehr einfach für Ihr Entwicklungsenvironment anpassen.
In Präsenzkursen stehen in den MicroConsult-Räumen PCs an den Arbeitsplätzen zur Verfügung. Für Online-Trainings und Onsite-Schulungen wird ein Remote-Zugang zur eingerichteten Übungsumgebung bereitgestellt. Wer möchte, kann aber auch einen eigenen Laptop mit vertrauter Entwicklungsumgebung (mindestens C++20) verwenden.
HINWEIS: Die Kursunterlagen sind auf Englisch
Lernziele
Sie erwerben fortgeschrittene Kenntnisse im Bereich der klassischen objektorientierten Programmierung mit C++, der Nutzung von Templates und der Standardbibliothek. Ferner erhalten Sie einen Überblick zu Exceptions, Metaprogrammierung und Multithreading. Unter alternativen Lösungsansätzen können Sie informiert auswählen und dabei Laufzeit-Performance und Ressourcen-Verbrauch angemessen berücksichtigen.
Zielgruppe
Der C++ Kurs für Fortgeschrittene richtet sich an Programmierer/innen, Software-Entwickler/innen, Software-Designer/innen und Software-Architekt/innen.
Voraussetzungen
Sie sollten die C++ Grundlagen, wie sie im Training C++für Ein- und Umsteiger vermittelt werden, beherrschen.
Offener Themenblock
Wiederholung von C++-Grundlagen (nur auf Wunsch)
Klassen, Objekte und Klassenrelationen (Vertiefung)