Versteckte Methoden

Beispielprogramm: VERERB3.CPP

Auch das Beispielprogramm VERERB3.CPP ist eine Wiederholung des ersten Programmes in diesem Kapitel mit einigen wenigen geringfügigen Änderungen.

Die abgeleiteten Klassen mit den Namen Auto und Laster haben das Schlüsselwort public nicht mehr vor dem Namen der Basisklasse in der ersten Zeile der jeweiligen Klassendeklaration. Wenn das Schlüsselwort public vor dem Namen der Basisklasse steht, erlaubt es, alle Methoden der Basisklasse in der abgeleiteten Klasse mit denselben Sicherheitseinschränkungen zu verwenden wie in der Basisklasse. Deshalb konnten wir auch im letzten Programm die Methoden, die als Teil der Basisklasse definiert waren, im Hauptprogramm aufrufen, obwohl wir wir mit einem Objekt einer der abgeleiteten Klassen gearbeitet haben.

In diesem Programm erben wir alle Elemente der Basisklasse als private, da vor dem Namen der Basisklasse das Schlüsselwort private steht. Deshalb sind sie außerhalb der abgeleiteten Klasse nicht verfügbar. Alle Elemente, die geerbt werden, fallen also unter zwei Zugriffsbeschränkungen, die Definitionen in der Basisklasse und die Einschränkungen bei der Ableitung. Es gilt jeweils die restriktivere der beiden. Das legt fest, wie die Elemente außerhalb der abgeleiteten Klasse verfügbar sind.

Alle Elemente werden in die abgeleitete Klasse mit denselben Zugriffsbeschränkungen übernommen, denen sie auch in der Basisklasse unterlegen sind, was ihre Sichtbarkein innerhalb der abgeleiteten Klasse selbst betrifft. In der Basisklasse verwenden wir jetzt wieder protected anstelle von private, deshalb sind die Elementvariablen innerhalb der abgeleiteten Klasse verfügbar.

In diesem Programm sind nur jene Methoden für Objekte der Klasse Auto verfügbar, die wir als Teil der Klasse selbst definiert haben. Deshalb können wir mit Objekten der Klasse Auto nur die Methoden mit den Namen Initialisiere() und Passagiere() verwenden.

Wenn wir ein Objekt der Klasse Auto deklarieren, enthält es der Definition von C++ gemäß drei Variablen, und zwar die eine von seiner Klasse definierte mit dem Namen Passagieranzahl und jene zwei, die Teil der Basisklasse sind, Raeder und Gewicht. Aufgrund des Schlüsselwortes protected in der Basisklasse können wir in den Methoden der abgeleiteten Klasse alle direkt verwenden. Die Variablen sind Teil eines Objektes der Klasse Auto, wenn wir es deklarieren und werden als solche gespeichert.

Einige der Bildschirmausgaben des Hauptprogrammes haben wir auskommentiert, da sie nicht mehr gültig oder sinnvoll sind. Die Zeilen 57 bis 59 mußten wir auskommentieren, da die Methoden HoleGewicht() und Radlast() nicht als Elemente der Klasse Auto verfügbar sind. Wir verwenden private bei der Vererbung. Initialisiere() ist immer noch verfügbar, es handelt sich aber um die Methode, die wir als Teil der Klasse Auto selbst definieren, nicht jene aus der Klasse Vehikel.

(weiter...)