Wie sieht es mit der Reihenfolge der Ausführung aus?

Es mag eigenartig erscheinen, aber die Elemente der Elementinitialisierungsliste (...) werden nicht in der Reihenfolge abgearbeitet, in der sie aufgeführt sind. Zuerst werden die Konstruktoren für die beerbte Klasse ausgeführt, in der Reihenfolge ihrer Deklaration im Klassenkopf. Bei der Verwendung von Vielfachvererbung können mehrere Klassen in der Kopfzeile erscheinen, in diesem Programm verwenden wir aber nur eine. Dann werden die Elementvariablen initialisiert, aber nicht in der Reihenfolge, in der sie in der Liste erscheinen, sondern in der Reihenfolge ihrer Deklaration in der Klasse. Schließlich wird der Code des Konstruktors selbst ausgeführt, sofern ein solcher Code existiert.

Es gibt einen guten Grund für diese befremdend anmutende Ordnung. Die Destruktoren müssen in umgekehrter Reihenfolge der Konstruktoren aufgerufen werden, wenn aber zwei Konstruktoren mit unterschiedlicher Reihenfolge der Konstruktion definiert sind, welcher soll dann die Reihenfolge der Destruktion bestimmen? Die korrekte Antwort ist: keiner. Das System verwendet die Ordnung der Deklaration für die Konstruktion und dreht sie für die Destruktion um.

Die Klasse Laster initialisiert zum einen die Basisklasse und zum anderen zwei Elementvariablen, Passagieranzahl und Ladung. Der Konstruktor selbst enthält keinen Code, so wie schon bei der Klasse Auto.

Wir verwenden die beiden Konstruktoren für die Klassen Auto und Laster in den Zeilen 69 und 78 für ein Objekt der Klasse Auto und eines der Klasse Laster.

Der Rest des Programmes sollte kein Problem mehr darstellen. Kompiliere dieses Programm und führe es aus, bevor Du weitergehst.

(weiter...)