Klausur Pr31 SS'06

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. Bei manchen Aufgaben steht als Orientierung der Anzahl der Programmzeilen in der Musterlösung. In den letzten 15 Minuten werden keine Fragen mehr beant­wor­tet.

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 Stich­worten 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.