balluff2019-06
Aktuelle Links:
(z.Z. keine - aber immer noch ein paar kleine "To Be Done"-s weiter unten im Text)
Liste der zusätzlichen Beispiele (kleine Demos und Mini-Aufgaben)
- Bereichsbasierte for-Schleife über native Array und Wertliste:
coliru.stacked-crooked.com/a/d8eae8a1c00d06fa - Demo-Beispiel für verschiedene Formen der Initialisierung
coliru.stacked-crooked.com/a/abfbf78127d3fd73 - Demo-Beispiel zu const für Klassen und Member-Funktionen
coliru.stacked-crooked.com/a/205d9a820e1f6942 - Operator-Funktionen für += und ++ (Präfix und Postfix)
coliru.stacked-crooked.com/a/6ce5e8bf722951d - Operator-Funktionen für Vergleiche
coliru.stacked-crooked.com/a/419315f2e274f3c1 - Komposition mit Member und privater Basisklasse vs. Vererbung
coliru.stacked-crooked.com/a/c83f490c411cbdae - Statisches vs. dynamisches Binden (mit virtual)
coliru.stacked-crooked.com/a/793c7665333dd4cd - Aufgabe:
Verwendung einer Referenz statt eines Zeigers für eine gerichtete Assoziation, wenn das verbundene Objekt immer vorhanden (inkl. Demonstration wie bei unvorsichtiger Vorgehensweise auch ungültige Referenzen entshehen können)
coliru.stacked-crooked.com/a/20b5b15117b95e68
coliru.stacked-crooked.com/a/b07d8b4e525111f5 (Loesung) - Aufgabe:
Anwendung des NVI-Idiom (Non-Virtual Interface aus "101 C++ Style-Guides")
coliru.stacked-crooked.com/a/abd2c18ba3f0f1ee
coliru.stacked-crooked.com/a/547c544996213c56 (Loesung 1 - nur für count())
coliru.stacked-crooked.com/a/81047a7b23669086 (Loesung 2 - auch für reset()) - Einfacher RingBuffer (als praktischer Anwendungsfall für Templates)
coliru.stacked-crooked.com/a/9b94c197839ea25e (mit festem Typ und fester Größe)
coliru.stacked-crooked.com/a/2ae3449f77639d25 (Typ und Größe generalisiert mit Template) - Operation für alle existierenden Objekte einer Klasse ausführen (als praktischer Anwendungsfall für static Member Daten und Templates)
coliru.stacked-crooked.com/a/e98fee31f0900cf0 (nur für festgelegten Typ: `int`)
coliru.stacked-crooked.com/a/e7d9018ba7d98138 (Typ generalisiert mit Template)
coliru.stacked-crooked.com/a/f66c2ee9ff907a60 (Code-Duplizierung vermieden) - Aushebeln von Zugriffsrechten (als Beispiel für `reinterpret_cast`)
coliru.stacked-crooked.com/a/5c17e4956032b440
Liste der Internet-Links
- Diverse Style-Guides
- TBD 101 Rules
- Rule Checking-Library (Github)
- C++-FAQ
- Wann ist Vererbung sinnvoll?
TBD - Das "Named Parameter" Idiom
TBD
- Wann ist Vererbung sinnvoll?
- Enturfmuster (= Zusammenspiel von Klassen zur Lösung "typischer" Aufgaben)
- TBD (GoF Buch)
- Kritische Bewertung des "klassischen" OOP-Ansatzes (via Vererbung und Polymorphismus)
- TBD (Execution in the Kingdom of Nouns)
- TBD (Why OOP is bad)
Anmerkungen zur Schulung 11.-14. Juni 2019
Motivation OOP:
- Zusammmenfassung von zusammengehörigen Daten zu einer Struktur
- Funktionen, die speziell nur diese Struktur bearbeiten (Inhalt ist ansonsten uninteressant)
- Mit C++: Sicherstellen, dass wirklich nicht anders auf die Daten zugegriffen
Initialisierung von Daten einer Klasse
- Member-Initialisierungsliste
- Direkte Member-Initialisierung, wenn vorhanden und nicht in Member nicht in der Initialiierungsliste des verwendeten Konstrukor
- Zuweisungen im Konstruktor-Block
- diese Zuweisungen erfolgen auch dann, wenn schon gemäß 1 oder 2 initialisiert wurde;
- hier können keine Konstanten oder Referenzen initialisiert werden
Änderung der Funktion `getCommand` in Support.cpp so dass diese nicht auf die <RETURN>-Taste warten muss (vermeidet einige Probleme bei der korrekten Einstellung von TeraTerm oder Putty):
sint8_t getCommand(void) { printf("\n::> "); char ch; while(true) { switch (getchar()) { case '1': case 'A': case 'a': ch = 'A'; break; case '2': case 'B': case 'b': ch = 'B'; break; case '3': case 'C': case 'c': ch = 'C'; break; case '4': case 'D': case 'd': ch = 'D'; break; default: ch = 0; } if (ch) { putchar(ch); return ch; } } }
TBD: Demo zum Kopieren von Objekten wenn als Paramer oer Returnwert verwendet, inkl. RVO und NRVO