# Gedächnisprotokoll Session ## Aufgabe 1: Grundlagen 1. Kompilierverlauf ergänzen 2. Deklaration/ Definition/ Zuweisung erkennen 4. Fehler suchen: Warum funktioniert das Programm nicht richtig? 5. Fehler beheben (Lücke ausfüllen) 6. Übergabestrategien 7. Aufgabe eines präprozessors (zwei nennen) 8. Objekt für einmal Heap und für einmal Stack legen - Funktion vollständigen - Heap: A* a = new A(b); - Stack: A a = A(b); 9. Was passiert ohne include guards - One Define Rule könnte verletzt werden wenn der Header mehrfach eingebunden wird 10. Reference und Zeiger setzen und was sind dann die Ausgaben (Ausgaben der Adresse war in Hex Format gefordert) ## Aufgabe 2: Speicherverwaltung 1. 2 Speicherverwaltung Fehler nennen und begründen in dem gegebenen Code ## Aufgabe 3: Objektorientierung 1. Fehlende Konstruktoren für Klassen implementieren. Es gab eine Basisklasse vehicle. Eine deren Methode müsste abstrakt deklariert werden. Der destrukter musste so angelegt werden, dass polymorphie funktioniert. Vehicle sollte nicht instantiert werden können. Die zwei Klassen boat und plane sollten beide von vehicle erben. Dann gab es eine 4. Klasse, die sowohl von boat als auch von plane erben soll aber so, das der Konstruktor von vehicle nicht mehrfach ausgegeben wird. 2. Gab 3 structs. Jedes struct erbt von dem vorherigen struct. (A B C). Welcher Destrukter wird bei dem Aufruf von delete C ausgegeben. Verwirrt hatte mich das hier die Klassen mit struct deklariert werden. 3. Wie nennt man eine abstrakte Methode noch (Fachsprache)? Wie sieht der Funktionsprototyp aus 4. Ermöglichen von Polymorphismus durch Verwendung von virtual ## Aufgabe 4: Fortgeschrittene Themen 1. Eine Klasse mylist hat eine variable iList. Man soll der Konstruktoren Signaturen vervollständigen. Einer davon war ein Copy Konstruktor. My list ist eine Templates Klasse. Die Aufgabe empfand ich als relativ schwer. Hier musste auch der + Operator so überladen werden, dass er zwei Listen konkatiniert. ![](https://i.imgur.com/dFtgbfJ.png) 3. Array in vector kopieren und nach comparator sortieren. Das mit einer eigenen Funktion auf der Konsole ausgeben. Umgang mit STLs (printf,...) 5. Smart Pointer und anhand einer Skizze erklären wieso welches Objekt wegfällt, wenn kein smart pointer darauf zeigt - main object, red(first), green, blue(last) objects, mainknows red as first and blue as last. Red knows green, green knows blue - Was passiert, wenn Zeiger first entfernt wird? - Was passiert, wenn Zeiger first auf green zeigt, welches vorher auf rot gezeigt hatte? ## Aufgabe 5: C 1. C Aufgabe. Hier wurde const correctness abgefragt. Am Ende müsste der String mit printf ausgegeben werden. Hier wurde mir Referenzen und Pointer gespielt und Mann musste eben sagen wann wo was ausgegeben wird. 2. Eine Funktion schreiben, die aus einem const char eine Zahl erstellt und diese ausgibt. Genauer mittels Iterator über const *char iterieren, dabei sowohl Adresse als auch char ausgeben. In der Schleife jedes einzelne char in eine Zahl umwandeln und an “number” - müsste ein int gewesen sein - von rechts anfügen 3. Bits setzen (dabei nur ~, |, &, <<, >> verwenden): Aufgabentypen: Bits flippen,aktivieren (1), deaktivieren (0), die ersten / letzten 4 Bits ausgeben 4. Extras in C++ im Vergleich zu C ## Sonstiges 1. Andere sichtbarkeit… außer public 2. 2 verschiedene Aufgaben, wo man in dem Code die Lücken füllen sollte 3. Diamond-Problem, wo entsprechend public virtual gesetzt werden musste und Konstruktoraufrufe und Destruktoraufrufe auf der Konsole ausgeben werden <style> html, body, .ui-content { background-color: #333; color: #ddd; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: #ddd; } .markdown-body h1, .markdown-body h2 { border-bottom-color: #ffffff69; } .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #fff; } .markdown-body img { background-color: transparent; } .ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a { color: white; border-left: 2px solid white; } .expand-toggle:hover, .expand-toggle:focus, .back-to-top:hover, .back-to-top:focus, .go-to-bottom:hover, .go-to-bottom:focus { color: white; } .ui-toc-dropdown { background-color: #333; } .ui-toc-label.btn { background-color: #191919; color: white; } .ui-toc-dropdown .nav>li>a:focus, .ui-toc-dropdown .nav>li>a:hover { color: white; border-left: 1px solid white; } .markdown-body blockquote { color: #bcbcbc; } .markdown-body table tr { background-color: #5f5f5f; } .markdown-body table tr:nth-child(2n) { background-color: #4f4f4f; } .markdown-body code, .markdown-body tt { color: #eee; background-color: rgba(230, 230, 230, 0.36); } a, .open-files-container li.selected a { color: #5EB7E0; } </style>