fronius2020-07
Kursbegleitende Seite zur Schulung C++FOR
bei Fa. Fronius, Wels, 21. bis 24. Juli 2020
Kurszeiten:
- Beginn 9:00 (erster Tag) Ende 17:00
- weitere Tage 8:30 - 16:30
- Mittagspause von 11:00 bis 11:45
- Letzter Tag Ende der Schulung ca. 15:00
- Danach bis 17:00 Open End für Fragen
Info-Graphiken ergänzend zur Schulungsunterlage
- Multiple Inheritance Details (Besonderheiten bei "Diamand-Shaped" Inheritance)
- Inheritance and Memory Layout (Hardwarenahe Betrachtung virtueller Basisklasse)
- IO-Stream Basics
- Extension-Points (Vergleich virtuelle Member Funktionen und via C++-Templates)
- Exception Basics
- Exception Details
- Type-Based Branching (Vergleich `type_id` mit `dynamic_cast`)
- Smart Pointer
- Template Basics
- Template "Code Bloat"
- Template Example
- ...
Ab hier in umgekehrter zeitlicher Reihenfolge (= aktuellster Eintrag immer oben)
- 2020-07-24 xx:xx Fortsetzung des Beispiels `SubscriberRegistry`
- https://godbolt.org/z/ETfsbo (Templatisierte Registry)
- https://godbolt.org/z/Yv1GvE (wie zuvor mit `std::map` für Ergebnisse)
- 2020-07-24 08:30 - 08:40 verschiedene Formen der Übergabe von Vergleichsfunktionen an `std::sort`:
- https://godbolt.org/z/bzbE3n (aufsteigend per Default vs. explizites Lambda)
- https://godbolt.org/z/648r1b (aufsteigend mit Lambda vs. absteigend mit Lambda)
- https://godbolt.org/z/T41YrP (mehre identische Lambdas ohne und mit Namen)
- TBD (Lambda vs. Funktor)
- TBD (Funktionszeiger vs. Funktor)
- ...
- https://godbolt.org/z/cYrhTY (C `qsort` vs. C++ STL `sort` Algorithmus)
- 2020-07-23 12:45 - 13:05 Fortsetzung der Übung
- der native Pointer `slots_` soll durch einen `std::unique_ptr<FunctionType[]>` ersetzt werden. Damit kann viel bisher selbst geschriebener Code ersatzlos entfallen (siehe: https://godbolt.org/z/Kq7Ebs).
- 2020-07-23 10:30 - 11:00 Fortsetzung der Übung:
- `slots` soll erst zur Laufzeit von der Größe her festgelegt sein
- statt native Array ein Pointer und new[] verwenden
- weitere Operationen ergänzen (z.B. Destruktor)
- oder Sperren (z.B. move und copy / c'tor und Zuweisung)
- Wenn auch die Größenkontrolle (Indexprüfung in remove-Funktion weiter unterstützt werden soll), muss zusätzlich ale member variable die allokierte Größe gespeichert werden (siehe: https://godbolt.org/z/rfnPbq)
- Wenn noch Zeit: Move-Construktor und Zuweisung selbst implementieren, damit die Registry z.B. von einer Factory-Funktion angelegt und als return-Wert zurückgegeben werden kann (siehe: https://godbolt.org/z/Y5zjsP)
- (eine alternative Lösung mit expliziten Destruktoraufrufen ist https://godbolt.org/z/94qqKc)
- Besser als diese wäre aber die Verwendung einer Hilfsfunktion für den gemeinamen Code von Destruktor und move c'tor sowie assigmnent.
- `slots` soll erst zur Laufzeit von der Größe her festgelegt sein
- 2020-07-23 ca. 08:55 - 9:30 Übung zum Thema Callables allgemein (Funktionen, Funktoren, Lambdas) sowie `std::function` und `std::bind`.
- Verwenden Sie den folgenden Programmrahmen und füllen Sie diesen an den mit TO-DO gekennzeichneten Stellen: https://godbolt.org/z/o9s14d
- Diese Übung ist auch zum eigenständigen "Experimentieren" mit den obigen Features gedacht. Sie können gerne die "TO-DO"-s lediglich als Anregung betrachten bzw. durch eigene Ideen ergänzen.
- Heben Sie den Link zu Ihrer letzten Version auf! (Z.B. als Lesezeichen in Ihrem Browser. In späteren Kapiteln folgen noch weitere Ausbaustufen.)
- LÖSUNG: https://godbolt.org/z/6vTn7j
- Variante mit `static_assert`: https://godbolt.org/z/64x4ev
- 2020-07-22 15:00
- https://godbolt.org/z/9o1aaW (Spielmaterial für Typumwandlungen)
- 2020-07-22 Kompilierbare Beispiele aus Kapitel EXC
- https://godbolt.org/z/A6bg9U (copy-paste EX-15...18)
- https://godbolt.org/z/S4op5a (copy-paste EX-21...24)
- https://godbolt.org/z/ve-bBX (copy-paste EX-25)
- https://godbolt.org/z/m7K92A (copy-paste EX-26)
- https://godbolt.org/z/iYJ4yJ (copy-paste EX-27)
- https://godbolt.org/z/WquFzw (copy-paste EX-30...33)
- https://godbolt.org/z/XHtBLn (copy-paste EX-42...44)
- https://godbolt.org/z/mdVmeY (copy-paste EX-42..43+45)
- https://godbolt.org/z/gejU3B (copy-paste EX-42..43+46)
- https://godbolt.org/z/KUw753 (zusätzliches Beisplel `noexcept` als Operator)
- 2020-07-22 ab 10:00 Übung zu State-Machine
- https://godbolt.org/z/EdER68 (Statemachine wie in BASICS-35...46)
- godbolt.org/z/x39e9T (wie zuvor mit kleineren Verbesserungen)
- https://godbolt.org/z/b7voG4 (mit Tabelle als `unordered_multimap`)
- https://godbolt.org/z/4TcYz1 (mit je einer Tabelle pro State)
- 2020-07-21 14:15 bis 14:30
- ÜBUNG: Interface zu Clock zur Entkopplung der Clock-Applikation und der Clock-Implementierung
- onlinegdb.com/B1GsqUNgv (Vorgabe)
- https://onlinegdb.com/Hkkilw4lw (Lösung)
- ÜBUNG: Interface zu Clock zur Entkopplung der Clock-Applikation und der Clock-Implementierung
- 2020-07-22 8:30 - 9:30 komplette Serie der `Counter`-Entwicklung
- https://onlinegdb.com/rk-mCk_gv (Simple example for building a clock from three `int`-s)
- https://onlinegdb.com/Hk7Xyl_xP (Example of clock build from a helper class)
- https://onlinegdb.com/Hk4sflueP (Adding an interface to the clock)
- https://onlinegdb.com/SyNhXe_lP (Separate counting into two classes)
- https://onlinegdb.com/BJl6Ee_xD (Apply "Non-Virtual Interface" Idiom)
- https://onlinegdb.com/H1MyDedlD (Add an Interface to link the counters)
- https://onlinegdb.com/ryVVk-_xP (Extension points via Template Base class)
- TBD (
- ...
- 2020-07-21 10:45 bis 11:50
- ÜBUNG: In Clock-Projekt die einzelnen `int` durch eine Klasse `Counter` ersetzen, welche das Rücksetzen eines `int value_` beim Erreichen eines Grenzwerts `const int max_value_` übernimmt und dabei die über einen `Counter *next_counter_` verbundene nächste Zählstufe um eins weiterschaltet. Wenn keine nächste Zählstufe folgt soll `next_counter_` den Wert `nullptr`haben – was in `Counter::Count` natürlich VOR der Weitergabe zu überprüfen!
- https://onlinegdb.com/Hkwa5mVew (Vorgabe)
- https://onlinegdb.com/S1_BYNVeP (Lösung)
- ÜBUNG: In Clock-Projekt die einzelnen `int` durch eine Klasse `Counter` ersetzen, welche das Rücksetzen eines `int value_` beim Erreichen eines Grenzwerts `const int max_value_` übernimmt und dabei die über einen `Counter *next_counter_` verbundene nächste Zählstufe um eins weiterschaltet. Wenn keine nächste Zählstufe folgt soll `next_counter_` den Wert `nullptr`haben – was in `Counter::Count` natürlich VOR der Weitergabe zu überprüfen!
- 2020-07-21 09:15
- Online-Compiler Test: onlineDBG
- Online-Compiler Test: Compiler Explorer
- Online-Compiler Test: Coliru
Scratchpad:
https://godbolt.org/z/oosnn5
https://godbolt.org/z/d5jv6h
https://godbolt.org/z/cPKhnf
https://godbolt.org/z/Kq7Ebs (Beispiele aus Kapitel Lambdas und mehr)
https://godbolt.org/z/fh4drq (Live-Beispiele zu `std::optional`)
https://godbolt.org/z/c16bPb (Live-Beispiel "NamedType" und Übung zu Templates)
https://godbolt.org/z/jzEKEE
https://godbolt.org/z/8j7bor
https://godbolt.org/z/o1EaGr