C++ für Fortgeschrittene: Weiterführende Programmiermethoden für C++-Entwickler

02.10.2018

09.09.2019 - 13.09.2019

Veranstaltungsort: München, MicroConsult

C++ für Fortgeschrittene: Weiterführende Programmiermethoden für C++-Entwickler

Mit steigender Softwarekomplexität ist es in vielen Applikationen sinnvoll, fortgeschrittene C++ Konstrukte einzusetzen; gleichermaßen unterstützen Änderungen und Erweiterungen des aktuellen C++ Standards.

Sie wenden Templates und Exceptions effizient an. Sie haben fundierte Kenntnisse der Standard Template Library (STL). Sie realisieren fortgeschrittene objektorientierte Konzepte und Designs mit C++, auch zusammen mit C++ Multithreading. Sie sind in der Lage, bestehende und neue Applikationen in Bezug auf Performance und Verbrauchsverhalten zu optimieren.

Inhalt

Themeneinleitung

  • Historie zu C++
  • Prinzipielle Compiler-Funktionalität
  • Praxistipps: Wertvolle Links im Internet

 

Kurze Zusammenfassung der C++ Grundlagen

  • Schlüsselworte
  • Variablen-Kategorien, Typen, Alignment
  • Klassen und Objekte
  • Konstruktor-Arten und Destruktor
  • Operatoren mit Überladung
  • Funktionszeiger in Klassen
  • Strings und Streams
  • Klassenrelationen: Assoziation, Selbst-Assoziation, Aggregation, Komposition, Vererbung, Mehrfachvererbung und Alternativen
  • Interface-Konzept mit rein virtuellen Funktionen
  • Übung: Sie verstehen die vorgegebene SW-Architektur und lernen dabei das Builder-Pattern kennen, implementieren Klassen, Komposition und Vererbung und testen diese automatisiert nach dem TDD-Vorgehen (Test Driven Development).
  • Dabei berücksichtigen Sie Qualitätsaspekte wie objektorientierte Programmierung, Modularisierung, Wiederverwendbarkeit und Erweiterbarkei

 

Exceptions

  • Erläuterung und Programmierung Exception Handling
  • Exception-Klassen und -Hierarchien
  • Benutzer-Exceptions
  • C++ Standard-Exceptions
  • Praxistipps: Konzepte, Richtlinien
  • Übung: Sie erweitern die Übungsapplikation um flexible Ausnahmebehandlung mit Exceptions

 

Runtime Type Identification (RTTI)

  • Erläuterung und Programmierung von RTTI
  • Klasse type_info
  • Bezug zu Exception Handling
  • Verwendungsmöglichkeiten und Konsequenzen beim Einsatz

 

New Style Casts

  • Static, dynamic, const und reinterpret Cast
  • Die richtige Wahl beim Einsatz
  • Bezug zu RTTI und Exception Handling

 

Speichermanagement

  • Speichersegmente (BSS Block Started by Symbol, Heap, Stack)
  • Vergleich und Bewertung der Datensegmente
  • Dynamisches Speichermanagement mit new und delete
  • Überladen (lokal und global) von new und delete
  • Algorithmen
  • Virtueller Destruktor
  • Placement new
  • Bezug zu Exception Handling
  • Smart Pointer (auch aus der STL)
  • Praxistipps: Risiken erkennen und Stolpersteine vermeiden

 

Template-Funktionen und Template-Klassen

  • Prinzipielle Funktionsweise
  • Template-Funktionen, Template-Klassen und deren Anwendung
  • Beispiele für Template-Klassen
  • Vererbung und Interfaces mit Template-Klassen
  • Container/Algorithmen im STL-Stil
  • Laufzeit- vs. Compilezeit-Polymorphismus
  • Perfect Forwarding mit Templates
  • Variadic Template-Funktionen und Template-Klassen
  • Alias-Templates
  • Praxisbeispiele für Template-Klassen
  • Übung: Sie wenden das Observer-Pattern im Design der Applikation an und implementieren es basierend auf einer containerartigen eigenen Template-Klasse

 

STL Standard Template Library

  • Container, Container-Adapter
  • Iteratoren
  • Algorithmen, Funktionsobjekte
  • Speicher-Allocator-Klasse
  • Praxistipp: Übersicht über alle STL-Containerelemente und deren Zusammenhänge
  • Übung: Sie wenden das Observer-Pattern im Design der Applikation an und implementieren es basierend auf einer STL-Container-Klasse

 

Multithreading und Atomic-Datentypen

  • Multithreading-Grundkonzepte
  • Threads, Mutex, Condition Variable, Future
  • Anwendung der Mechanismen
  • Übung: Sie adaptieren die Applikation an einen Timer und steuern sie über einen Thread. Dabei nutzen Sie mit ihren Vorteilen eine zusätzliche Betriebssystem-Abstraktion mit Wrapper-Klassen.

 

Regular Expression

  • Funktionsweise und Anwendung
  • Vorstellung der regex Library
  • Praxisbeispiele

 

Effektivität und Effizienz

  • Optimierungsaspekte und Verbrauchsverhalten: Daten-, Programmspeicher und CPU-Rechenzeit
  • Overhead-Minimierung und Performance-Maximierung
  • Checkliste mit Bewertungen wichtiger Sprachmittel
  • Praxistipp: Online-Compiler

 

Typische Fallstricke und verbreitete Idiome (PIMPL, RAII, NVI, ...)

  • RAII (Resource Acquisition Is Initialization), Ressourcen-Wrapper
  • NVI (Non-virtual Interfaces)
  • PIMPL (Pointer to Implementation)
  • Handling Self-Assignment in Assignment Operator
  • Praxistipps zu weiteren C++ Idiomen

 

Übungen im C++ Kurs für Fortgeschrittene

  • Für die Implementierung der durchgängigen Übung (Uhrenapplikation) verwenden Sie das Microsoft Visual Studio.