Anfänger wrote:
> ja ich möchte wissen ob das stimmt was ich hier geschrieben habe.
> kann man hier dann von einem kaskadiertem Kontruktur reden?
Den Begriff 'kaskadierter Konstruktor' hab ich zwar noch nie
gehört, aber ja, ich denke das könnte man so sagen.
Wenn ein Fahrzeuge Objekt erzeugt wird, muss ja auch ein
Auto Objekt erzeugt werden. Die deshalb, weil ja
durch die Vererbung
class Fahrzeuge : public Auto
{
...
};
festgelegt wurde, dass ein Fahrzeug ein Auto ist
(Und an dieser Stelle solltest du nochmal über die
Vererbungshierarachie nachdenken:
Ist es wirklich so, dass jedes Fahrzeug automatisch ein Auto
ist, oder ist es nicht vielmehr so, dass jedes Auto auch
automatisch ein Fahrzeug ist
Eine public-Vererbung kann immer als 'ist-ein' gesprochen
werden
class Auto : public Fahrzeug
heist also: Ein Auto 'ist-ein' Fahrzeug
class Fahrzeug : public Auto
würde heissen: Ein Fahrzeug 'ist-ein' Auto
)
Nun hat aber ein Auto keinen Default-Konstruktor, daher
muss beim Konstruktor für Fahrzeug angegeben werden, welcher
Konstruktor von Auto benutzt werden soll (es könnte ja mehrere
geben)
Fahrzeuge::Fahrzeuge(int anzahl): Auto(anzahl)
und da dieser Auto Konstruktor ein Argument haben möchte,
muss man ihm dieses auch mitgeben.
Das ganze nennt sich übrigens 'initializer list':
Nach der 'Funktionsdefinition' des Konstruktors kann
ein : folgen und auf diesen : folgen alle Initialisierungen,
die gemacht werden sollen. Dazu gehört auch eine mögliche
Angabe, wie die Initialisierung der Basisklasse durchgeführt
werden soll, sprich welcher Konstruktor aufgerufen werden
soll und welche Argumente er erhalten soll.
Um das mit den 'initializer list's noch zu vertiefen.
Du hättest auch schreiben können
class auto
{
public:
auto( int anzahl );
private:
int anzahl_raeder;
};
auto::auto(int anzahl) : anzahl_raeder(anzahl)
{
...
}
anzahl_raeder wird also mit dem übergebenen Parameter anzahl
initialisiert. In dem Fall gibt es keinen Unterschied zu
auto::auto(int anzahl)
{
anzahl_raeder = anzahl;
}
es gibt aber sehr wohl Fälle, wo dieser Unterschied
(Initialisierung versus Zuweisung im Konstruktor)
eine entscheidenden Unterschied ausmacht.
> Mit x = this , tue ich den this Zeiger dem globalen Zeiger x zuweisen.
Ja.
Ist zwar nicht schön, kann man aber so machen.
> Damit kann ich dann auf die Methoden einer Funktion die nicht Mitglied
> in fahrzeuge und auto ist zugreifen.
? Den Satz versteh ich beim besten Willen nicht. Da ist nicht
erkennbar, welchen Sinn du rüber bringen möchtest.