Unsere erste abgeleitete Klasse

Beispielprogramm: AUTO.H

Die Datei AUTO.H enthält unser erstes Beispiel einer abgeleiteten- oder Kindklasse. Die Klasse Vehikel wird durch :public Vehikel in Zeile 7 ererbt. Die abgeleitete Klasse Auto besteht aus allen Elementen der Basisklasse Vehikel und allen ihren eigenen Elementen. Obwohl wir an der Klasse mit dem Namen Vehikel nichts verändert haben, wurde sie zur Basisklasse allein durch die Art und Weise, wie wir sie hier verwenden. Obzwar sie hier als Basisklasse eingesetzt wird, gibt es keinen Grund, sie nicht weiterhin auch als ganz normale Klasse zu verwenden wie etwa im vorigen Beispielprogramm. Sie kann in ein und demselben Programm als Basisklasse und als einfache Klasse auftreten. Über die Frage, ob es sich um eine Basisklasse oder eine einfache Klasse handelt, entscheidet allein die Verwendung.

Wir müssen uns wieder ein wenig der Terminologie widmen. Im objektorientierten Programmieren wird eine Klasse, die von einer anderen Elemente erbt, generell abgeleitete Klasse oder Kindklasse genannt, in C++ spricht man meist von einer abgeleiteten Klasse. Da die beiden Ausdrücke recht bildhaft sind und sie meist austauschbar verwendet werden, werden auch wir in dieser Einführung beide gebrauchen. So ist der "richtige" Ausdruck für die Klasse, von der geerbt wird, in C++ Basisklasse, aber auch Elternklasse oder Superklasse können verwendet werden.

Eine Basisklasse ist eine recht generelle Klasse, die ein breites Spektrum an Objekten umfaßt, wogegen eine abgeleitete Klasse etwas spezieller und eingeengter, dafür aber auch nützlicher ist. Nehmen wir zum Beispiel an, wir hätten eine Basisklasse mit dem Namen Programmiersprache und eine abgeleitete Klasse mit dem Namen C++. Mit der Basisklasse könnten wir Pascal, Ada, C++ oder jede andere Programmiersprache definieren, sie könnte uns aber keine Auskunft darüber geben, wie Klassen in C++ verwendet werden, da sie von jeder Programmiersprache nur ein allgemeines Bild vermittelt. Die abgeleitete Klasse C++ hingegen könnte die Verwendung von Klassen definieren, nicht jedoch eine der anderen Programmiersprachen, da sie dafür zu eingeengt ist. Eine Basisklasse ist genereller, eine abgeleitete Klasse spezieller.

Im Fall unseres Beispielprogrammes kann die Basisklasse Vehikel verwendet werden, um so unterschiedliche Objekte wie Lastwägen, Autos, Fahrräder oder jedes andere Vehikel zu deklarieren. Mit der Klasse Auto hingegen können wir nur Objekte deklarieren, die auch Autos sind, da wir die Informationen, die mit dieser Klasse verwendet werden können, eingeschränkt haben. Deshalb ist die Klasse Auto spezieller und eingeschränkter als die Klasse Vehikel. Die Vehikel Klasse ist umfassender.

Wenn wir eine noch spezieller Klasse wollen, können wir Auto als Basisklasse verwenden um eine Klasse mit dem Namen Sportauto zu deklarieren und Informationen wie etwa Hoechstgeschwindigkeit oder Manta? inkludieren, Informationen also, die für ein normales Auto nicht wirklich von Belang sind. Die Klasse Auto würde dann zur selben Zeit als abgeleitete Klasse und als Basisklasse fungieren, womit klar sein sollte, daß diese Ausdrücke sich nur darauf beziehen, wie eine Klasse verwendet wird.

(weiter...)