Aufgabe 1.
template <class TElement>
void GWarteschlange<TElement>::austragen() throw (ESchlange_leer) {
if (zaehler > 0) { // Anzahl der gespeicherten Elemente
leseindex = leseindex % groesse + 1; // auf groesse-1 folgt 1
zaehler--;
}
else { ESchlange_leer e; throw e; }
}
Aufgabe 2:
class CVerkettbarer_Kreis : public CKreis { protected:
CVerkettbarer_Kreis* Naechster;
public:
Einfuegen (CVerkettbarer_Kreis* Kreis) { Naechster = Kreis; }
}
CVerkettbarer_Kreis Kreis1, Kreis2, Kreis3;
Kreis2.Einfuegen (&Kreis1);
Kreis3.Einfuegen (&Kreis2);
// oder:
CVerkettbarer_Kreis* Kreis1 = new CVerkettbarer_Kreis;
CVerkettbarer_Kreis* Kreis2 = new CVerkettbarer_Kreis;
CVerkettbarer_Kreis* Kreis3 = new CVerkettbarer_Kreis;
Kreis2 -> Einfuegen (Kreis1);
Kreis3 -> Einfuegen (Kreis2);
// oder:
CVerkettbarer_Kreis* Anker = new CVerkettbarer_Kreis;
Anker -> Einfuegen (new CVerkettbarer_Kreis);
Anker -> Naechster -> Einfuegen (new CVerkettbarer_Kreis);
Aufgabe 3:
(X) richtig Für Klassen, die als verkettete Listen implementiert wurden, kann die Standard-Gleichheit falsches Ergebnis liefern.
Grund: Sonst vergleicht sie nicht ihren Inhalt, sondern die Verweise (den Anker)
(X) richtig Abstrakte Datentypen, die in C programmiert wurden, sind nicht wirklich abstrakt.
Grund: Die ADT-Komponenten sind in der Schnittstelle sichtbar
(X) falsch Ein Destruktor wird für ein Klassenobjekt nur dann ausgeführt, wenn er aufgerufen wird.
Grund: Ein Destruktor kann nicht aufgerufen werden; er wird ausgeführt, wenn das Objekt aufgelöst wird.
(X) falsch Die Typvererbung erweitert die Schnittstelle einer Klasse immer um mindestens eine Methode, die auf die Datenstruktur der Vaterklasse zugreift.
Grund: Sie kann auch über die Methoden der Vaterkalsse zugreifen
(X) falsch Rückruf kann in C mit Schablonen implementiert werden.
Grund: In C gibt es keine Schablonen
(X) richtig Es gibt Variablen, in die Werte unterschiedlicher, aber nicht aller Datentypen gespeichert werden können
Grund: die polymorphen Zeiger
(X) falsch Ausnahmen in C++ müssen entweder abgefangen oder deklariert werden, sonst meldet der Compiler einen Fehler.
Grund: nur in Java; in C++ ist die Deklaration einer Ausnahme nur Kommentar
(X) falsch Verweisobjekte befinden sich entweder auf der Halde oder in Ausnahmefällen auf dem Stapel.
Grund: Es ist kein Ausnahmefall, wenn sich ein Verweisobjekt (wie ein beliebiges anderes Objekt) auf dem Stapel befindet.
Aufgabe 4.
#include "STEUER.HPP"
&ostream datei;
void ankunft(CMessdaten* messdaten) { datei << messdaten; }
void ende() { datei.close(); exit(0); }
void main() {
datei.open();
steuerung(ankunft, ende);
}
Aufgabe 5.
CFarbensack::fuellen(int farbe) {
daten[farbe]++; }
CFarbensack::wie_oft(int farbe) { return daten[farbe]; }
Aufgabe 6.
void
main() {class CKlasse : public CAufgeschoben {
virtual void ausgabe {}; // oder anderer Rumpf
CKlasse objekt;
objekt.fuellen();
objekt.ausgeben();
}
Aufgabe 7.
typedef GBehaelter<int> TBehaelter;
void fuellen(Tbehaelter& behaelter, const int element) throw(EBehaelter_voll) { behaelter.fuellen(element); }
void entleeren(TBehaelter& behaelter) throw(EBehaelter_leer) { behaelter.entleeren(); }
int inhalt(TBehaelter& const behaelter) throw(EBehaelter_leer) { return behaelter.inhalt(); }
bool gefuellt(TBehaelter& const behaelter) { return behaelter.gefuellt(); }