Konstruktoren und Destruktoren

Beispielprogramm: KONSMAST.CPP

Das Programm KONSMAST.CPP soll uns jetzt mit Konstruktoren und Destruktoren bekannt machen.

Bis auf die Tatsache, daß wir einen Konstruktor und einen Destruktor hinzugefügt haben, ist dieses Beispielprogramm identisch mit dem letzten. In Zeile 9 deklarieren wir den Konstruktor, der immer denselben Namen hat wie die Klasse selbst, und in den Zeilen 15 bis 19 definieren wir ihn. Der Konstruktor wird vom C++ System automatisch aufgerufen, wenn ein Objekt deklariert wird und verhindert die Verwendung von uninitialisierten Variablen. Wenn wir also in Zeile 48 das Objekt mit dem Namen Box deklarieren, ruft das System automatisch den Konstruktor auf. Der Konstruktor setzt die zwei Variablen, Hoehe und Breite, im Objekt mit dem Namen Box beide auf den Wert 6 . Zur Kontrolle geben wir das in den Zeilen 51 und 52 aus. Genauso werden bei der Deklaration vom Quadrat die Werte für die Hoehe und die Breite des Quadrat durch den Konstruktor beide mit 6 initialisiert.

Ein Konstruktor hat der Definition nach denselben Namen wie die Klasse selbst. In diesem Fall heißen beide Rechteck. Die Definition von C++ verbietet einen Rückgabewert des Konstruktors. Eigentlich hat er einen vordefinierten Rückgabetyp, nämlich einen Zeiger auf das Objekt selbst, das soll uns aber bis sehr viel später in dieser Einführung nicht kümmern. Obwohl beiden Objekten durch den Konstruktor Werte zugewiesen werden, initialisieren wir sie in den Zeilen 60 und 61 mit neuen Werten. Da wir einen Konstruktor haben, der die Initialisierung übernimmt, sollten wir der Methode Initialisiere() vielleicht einen anderen Namen geben, das Konzept illustriert sie aber auch so.

Der Destruktor ist dem Konstruktor sehr ähnlich, nur wird er aufgerufen, wenn ein Objekt nicht mehr gültig ist. Du wirst sich erinnern, daß automatische Variablen eine beschränkte Lebensdauer haben, da ihre Tage gezählt sind, sobald das Programm den Block, innerhalb dessen sie deklariert wurden, verläßt. Gerade bevor dies geschieht wird der Destruktor aufgerufen, so einer existiert. Ein Destruktor hat denselben Namen wie die Klasse selbst mit einer Tilde davor. Ein Destruktor hat keinen Rückgabewert.

Wir deklarieren einen Destruktor in Zeile 12 und definieren ihn in den Zeilen 32 bis 36. In diesem Fall weist der Destruktor nur den Variablen jeweils den Wert 0 zu bevor ihr Speicherplatz freigegeben wird, es passiert also im Grunde gar nichts. Der Destruktor wurde nur hinzugefügt, um zu zeigen, wie er verwendet wird. Wenn innerhalb des Objektes dynamisch Speicherplatz beschafft wurde, sollte der Destruktor diesen freigeben, bevor die Zeiger darauf verloren gehen. Damit ist ihr Speicherplatz für weitere Verwendung verfügbar.

Es ist interessant zu wissen, daß ein Konstruktor für ein Objekt, das vor der Funktion main() deklariert wird, eine globale Variable also, auch vor der Funktion main() abgearbeitet wird. Genauso wird ein Destruktor für ein solches Objekt nach dem Abarbeiten der Funktion main() aufgerufen. Das hat zwar auf Dein Programm keinen wesentlichen Einfluß, ist aber doch recht interessant.

(weiter...)