DIPL.-ING. MARTIN WEITZEL, 64380 ROSSDORF, GERMANY

cpp11-krone2021-11

Links zur Schulung am 3. und 4. November

Meine Telefonnummer bei Problemen mit der MS-Teams Telko

0151 1787 1397

Online-Version der Unterlagen:

Live-Demos:

Fortlaufende Aufgabe:

HINWEIS: Nicht nur in der abschließenden sondern in allen Versionen sollten die move/copy-Operationen NICHT `=default` sondern `=delete` sein, da aufgrund des enthaltenen Zeigers nicht einfach kopiert werden darf! 

  • Anfang Tag 1: https://onlinegdb.com/vGFAl8F2E
  • Anfang Tag 2: https://onlinegdb.com/_1cSpqJNy
  • 10:00 Tag 2: https://onlinegdb.com/lR6YRwYrb
  • 11:00 Tag 2: https://onlinegdb.com/uxZCM3Sby
  • Kursende: https://onlinegdb.com/XDbbw4v33
    • Schauen Sie sich dann den Code in `my_static_vector.h` an.
      (es handelt sich um eine momentan noch stark eingeschränkte Form des `std::vector`)
    • (die Details der Definition des Makros `SHOW_` können Sie dabei zunächst ignorieren)
    • Schauen Sie sich kurz den Code in `main.cpp` an.
  • Zustand am Ende des Tages: https://onlinegdb.com/wNd04S3qs
  • Klicken Sie auf den Button RUN um den Code zu kompilieren und auszuführen.
  • Klicken Sie auf den Button FORK, damit Sie Änderungen vornehmen können.
  • Tragen Sie in `main.cpp` in den Zeilen 28 und 30 die richtigen "Erwartungswerte" ein
    • Die zugehörigen Ausgaben nun mit einem Sternchen markiert sein.
    • (nicht mehr mit einem Ausrufezeichen)
  • Entfernen Sie in `main.cpp` Zeile 52 den Kommentar vor dem Aufruf von `max_size_test`.
  • Klicken Sie eneut auf den Button RUN, um den Code zu kompilieren und auszuführen.
    • Kontrollieren Sie die zusätzlichen erscheinenden Ausgaben.
    • (sie sollten mit Sternchen beginnen, da die Erwartungswerte stimmen)
  • Enfernen Sie in `main.cpp` Zeile 53 den Kommentar vor dem Aufruf von `push_pop_back_test`.
    • Wenn Sie nun auf RUN klicken, werden zunächst KEINE zusätzlichen Ausgaben erscheinen von `push_pop_back_test` erscheinen.
    • Ergänzen Sie in den drei mit "TBD"-markierten Zeilen dieser Funktion die entsprechenden Aufrufe von `SHOW_` (mit den richtigen Erwartungswerten).
  • ZUSATZFRAGE: Prinzipiell gehört auch `my::static_vector::value_type` zur "öffentlichen Schnittstelle dieser Klasse. Wie könnte man hierfür einen passenden "Testfall" schreiben? (Eigentlich sollte es zu jedem Feature einer Klasse einen Test geben, im "extremen" TDD-Stil sollte dieser sogar der Implmentierung des Features vorausgehen.)

Diese Aufgabe wird im Lauf der beiden Schulungstage ausgebaut um die Features zu vervollständigen und den `my::static_vector` möglichst ähnlich zum `std::vector` zu machen. Wenden Sie dabei ggf. auch im schon vorhandenen Code von `my::static_vector` SOWEIT SINNVOLL die C++11 Features an, die in dieser Schulung behandelt werden:

  • `constexpr` für Variablen und Funktionen
  • `auto` für Variablen und Funktionen
  • `decltype` zur Ermittlung des Typs von Ausdrücken und Variablen
  • Initialisierung mit geschweiften Klammern
  • Typ-Aliase mittels `using`
  • direkte Member-Daten-Initialisierung
  • vermeiden unerwünschter Konstruktoren mit `=delete`
  • explizite Bereitstellung automatisch generierter Member-Funktionen mit `=default`
  • `alignas`, `alignof`, `std::aligned_storage`  
  • Korrektheitsprüfungen zur Compilezeit mit `static_assert`
  • Type Traits (`std::conditional`, `std::enable_if`, ...)
  • ...
  • (Liste wird gemäß Kursfortschritt ergänzt)