1) Gefragt wird nach einer theoretischen Definition aus dem Bereich der
objektorientierten Programmierung auf der Basis von C++.
Beispiele:
Beschreiben Sie das Prinzip des Operator Overloading und geben Sie ein
Beispiel in Pseudocode für einen überladenen Zuweisungsoperator.
Beschreiben Sie das Prinzip der Vererbung eingehend.
Beschränken Sie sich bei Ihren ausführlichen Erläuterungen
jedoch auf die einfache Vererbung.
Ausnahme: Definieren Sie den Unterschied zwischen einfacher und mehrfacher
Vererbung (single v. multiple inheritance).
Bei der Beantwortung wird erwartet, dass das theoretische Konzept in
zusammenhängenden Sätzen erläutert wird, die durch
sinnvolle Codefragmente in C++ erläutert werden.
Die C++ Fragmente müssen korrekt sein.
(Z.B.: Es darf nicht behauptet werden, dass
~meineKlasse()
ein Konstruktor wäre ...).
Es ist jedoch nicht notwendig, dass sie bis zum letzten Semicolon
syntaktisch korrekt sind.
2) Gefragt wird ferner nach der präzisen Definition einer kleineren
Anzahl (je nach Schwierigkeit, drei bis sechs) von Schlüsselworten,
Operatoren oder eingebauten Klassen.
Beispiele:
Beschreiben Sie die Funktion der folgenden Schlüsselwörter in
C++.
- constant
- virtual
- friend
- protected
- ifstream
- this Zeiger.
- etc., etc., etc.
Bei der Beantwortung wird erwartet, dass eine präzise, in der Regel
ein- bis zweizeilige Definition geliefert wird.
Längere Texte werden akzeptiert, verbessern das Ergebnis aber
nicht.
3) Die Klausur enthält ein kurzes, vor der Klausur getestetes C++
Programm im Quellcode.
Gefordert wird eine exakte Wiedergabe der durch das Programm gelieferten
Ausgabe.
Beispiele:
#include <iostream.h>
int main()
{
class ClElter
{
public:
ClElter() { cout << "Frag a" << endl; }
ClElter(char *banner) {cout << "Frag b" << banner << endl;}
~ClElter() { cout << "Frag c" << endl; }
};
class ClKind : public ClElter
{
public:
ClKind() { cout << "Frag d" << endl; }
ClKind(char *banner) { cout << "Frag e " << banner << endl; }
~ClKind() { cout << "Frag f" << endl; }
};
ClKind objekt("beispiel");
}
Welche Ausgabe wird durch dieses Programm produziert?
Warum?
#include <iostream.h>int main() { char *beispiel[] = {"Rhabarberkompott", "Unternehmensberatung", "An dem Rhein", "So in Köln im Brauhaus", "Der Wahlbetrug", "Volle Besinnung", "Auftragsannahme", "Rhabarber am Stück", "Der Eigensinn als Stilmerkmal" };
for (int i=8;i>0;i--) cout << (*(beispiel+i))[12-i]; cout << endl;
Welche Ausgabe wird durch dieses Programm produziert?
Warum?
Bei der Beantwortung wird erwartet, dass (a) die Ausgabe dieses Programmes
vollständig und korrekt wiedergegeben wird, (b) in maximal fünf
Zeilen jene Prinzipien aufgelistet werden, die für das Funktionieren
verantwortlich sind.
(Im ersten Beispiel etwa: Weil der Konstruktor einer Basisklasse vor
dem einer abgeleiteten Klasse aufgerufen und der Destruktor einer
abgeleiteten Klasse vor dem einer Basisklasse aufgerufen
wird.
Schließlich folgt eine Frage, bei der das Format einer Datei oder
die Eigenschaften eines konzeptuellen Objektes beschrieben werden und
gebeten wird, einen bestimmten Programmteil zu ihrer Bearbeitung zu
skizzieren.
Beispiel:
Zitat aus einem Diskussionsforum für Bibliothekare:
.. Dann aber enthüllt er ERC = "Electronic
Resource Citation", und am Ende bleibt fuer
D(ublin) C(ore) scheinbar kein
Argument mehr uebrig, denn ERC ist einfacher und doch
vollstaendiger, kompakter, besser erweiterbar,
viel leichter verarbeitbar und internationaler als DC.
[Anmerkung M.Th.: DC gilt derzeit als "der" bibliothekarische
Minimalstandard.]
Wie sieht ERC aus? Im einfachsten Fall so:
erc:
who: Gibbon, Edward
what: The Decline and Fall of the Roman Empire
when: 1781
where: http://www.ccel.org/g/gibbon/decline/
mit genau vier notwendigen Elementen, die angeblich fuer eine
"Minimalbeschreibung jedes Objekts im Universum" reichen.
Sie können davon ausgehen, dass Fortsetzungzeilen mit mindestens
einer Leerstelle beginnen.
Gesucht ist eine Klasse ClLibrary die einen Konstruktor enthält, der
eine derartige Datei liest.
Skizzieren Sie diesen Konstruktor in C++.
Die zu verwendenden Kontrollstrukturen und die I/O Statements sind in C++
anzugeben; der Rest in Pseudocode.
