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(); }