Unterlagen und Hilfsmittel sind nicht zugelassen. Kommunikation während der Klausur ist nur mit dem Dozenten erlaubt, der Missverständnisse und Unklarheiten klären kann. Schreiben Sie die Lösungen auf diese Blätter, bzw. auf ein nummeriertes leeres Blatt mit Ihrem Namen; kennzeichnen Sie die Aufgabennummer eindeutig. Geben Sie alle Blätter ab. Für falsche oder nicht einleuchtende Lösungen bekommen Sie grundsätzlich keine Punkte. Wenn aber aus Ihren Notizen oder Bemerkungen ersichtlich ist, dass Ihr Gedankengang richtig war, können Sie Teilpunkte bekommen. Sie verlieren jedoch diese Möglichkeit, wenn Abschreiben oder Kommunikation während der Klausur nachgewiesen werden kann. Der Kern der Fragen wurde kursiv gesetzt.
In den letzten 15 Minuten werden keine Fragen mehr beantwortet.Klausurtermin: 7. Juli 2006 ● Rückgabe: 14. Juli 2006 in der Vorlesung
Die Klausurnote (rot) wird abwärts gerundet. Sie ergibt mit der Übungsnote (blau) gemittelt die Endnote (gelb):
Aufgabe 1: Schreiben Sie den Rumpf der Methode enthaelt der Klasse CStapel (wie in der Vorlesung program-miert), die feststellt, ob ein CStapel-Objekt einen gegebenen Ganzzahlwert enthält oder nicht. Die Variablen der Klasse CStapel sind:
class CStapel { private: int spitze; int* inhalt; // Zeiger auf Reihung … };
Aufgabe 2: Sie haben in der Übung die Warteschlange mit unterschiedlichen Techniken implementiert. Schreiben Sie nun einen Operatorfunktion ++ (keine Methode) für eine beliebige Ihrer Warteschlangen-Implementierungen, der das älteste Element zum jüngsten macht (das vorderste Element nach hinten in der Schlange anstellt). Achten Sie darauf, dass der Operator keine Ausnahme EVoll auslösen kann. Ermöglichen sie auch Mehrfach-Inkrementierung der Art stapel++ ++;
Schreiben Sie zwei Versionen des Operators: eine Funktion nach dem Prinzip „Konzentration von Know-How“ und eine zweite, wo Sie keine this-Methoden, nur this-Variablen benutzen. Schreiben Sie dabei auch die Vereinbarung dieser Variablen auf. Vergessen Sie nicht, der Operatorfunktion den Zugriff auf diese Variablen zu erlauben, sowie const überall ansetzen, wo es angebracht ist.
Aufgabe 3.: Fertigen Sie ein Objektdiagramm für die obige Aufgabe an. Stellen Sie den Zustand vor und nach dem Ablauf des Operators ++ dar. An Ihrer Zeichnung soll erkennbar sein, welches Element von vorne nach hinten gebracht wurde.
Aufgabe 4.: Tragen Sie in die folgende Tabelle die Begriffe „Stapelobjekt“, „referenziertes Objekt“, „eingebettetes Objekt“ und „Haldenobjekt“ ein. Illustrieren Sie an möglichst einfachen Programmbeispielen die vier Fälle.
|
lokale Variable |
globale Variable |
ohne Zeiger |
|
|
mit Zeiger |
|
|
Aufgabe 5. Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung mit Stichworten dazu. Ohne Begründung gilt Ihre Antwort als falsch.
( ) Richtig Ein C++-Compiler
kann auch Bytecode erstellen.
( ) Falsch
Grund:
( ) Richtig In C++ wird immer
statisch gebunden.
( ) Falsch
Grund:
( ) Richtig Der private Teil
der Header-Datei wird erst beim Binden benötigt.
( ) Falsch
Grund:
( ) Richtig
cout ist ein
Operator der Klasse
ostream, der im
iostream.h vereinbart wurde.
( ) Falsch
Grund:
( ) Richtig Aus
Referenzgleichheit folgt immer tiefe Gleichheit.
( ) Falsch
Grund:
( ) Richtig Der Destruktor von
Stapelobjekten wird implizit aufgerufen.
( ) Falsch
Grund:
( ) Richtig Für
Schablonenparameter und für Ausnahmen können dieselben Typen benutzt werden.
( ) Falsch
Grund:
( ) Richtig Mit
dynamic_cast
wird der Inhalt eines Oberklassenobjekts in ein Unterklassenobjekt
( ) Falsch übertragen.
Grund:
Aufgabe 6.: Alte Software wird oft eingekapselt und mit moderner Schnittstelle versehen. So soll der alte abstrakte Datentyp TLeitung in Zukunft als Klasse angeboten werden. Die Funktionen des ADT sind:
void verbindungHerstellen(TLeitung); void verbindungFreigeben(TLeitung); bool belegt(TLeitung);
Programmieren Sie eine Klasse CLeitung (mit Spezifikation und Rumpf), die die entsprechenden Methoden exportiert.