konstruktor-vererbung, default-konstruktoren



  • hi,

    angenommen ich habe eine basisklasse (basis), welche eine ganze menge konstruktoren hat.
    nun leite ich davon eine klasse (c) ab, definiere aber keine konstruktoren neu.
    werden nun die konstruktoren vererbt, oder nicht?
    bzw, wann genau werden sie nicht vererbt?



  • Konstruktoren werden nie vererbt. Vereinfach kann man sagen dass die Kindklasse eine Elternklasse in sich besitzt. Sprich: Eltern C'tor, Kind C'tor, ..., Kind D'tor, Eltern D'tor.

    Gruß



  • FireFlow schrieb:

    Konstruktoren werden nie vererbt. Vereinfach kann man sagen dass die Kindklasse eine Elternklasse in sich besitzt. Sprich: Eltern C'tor, Kind C'tor, ..., Kind D'tor, Eltern D'tor.

    Gruß

    jepp, hab ich gerade auch festgestellt.
    wenn ich also irgendwelche funktionalität haben will, muss ich den konstruktor in der vererbten klasse implementieren und dann den basisklassenkonstruktor aufrufen?

    und wenn ich keinen konstruktor angebe, wird trotzdem der default-konstruktor erstellt, und ruft dann den basis-konstruktor auf?



  • c0mst schrieb:

    wenn ich also irgendwelche funktionalität haben will, muss ich den konstruktor in der vererbten klasse implementieren und dann den basisklassenkonstruktor aufrufen?

    Ja mußt du (wenn dir das Default-Verhalten der Basisklasse dafür reicht, benötigst du übrigens keinen expliziten Aufruf des Basis-Ctor's)

    und wenn ich keinen konstruktor angebe, wird trotzdem der default-konstruktor erstellt, und ruft dann den basis-konstruktor auf?

    Ja, wird er - dieser ruft den Default-Konstruktor der Basisklasse auf und initialisiert anschließend die eigenen Member.
    (wenn der Default-Ctor der Basis nicht existiert oder nicht erreichbar ist (private), führt das zu einem Fehler)



  • ok, danke @beide

    CStoll schrieb:

    c0mst schrieb:

    wenn ich also irgendwelche funktionalität haben will, muss ich den konstruktor in der vererbten klasse implementieren und dann den basisklassenkonstruktor aufrufen?

    Ja mußt du (wenn dir das Default-Verhalten der Basisklasse dafür reicht, benötigst du übrigens keinen expliziten Aufruf des Basis-Ctor's)

    häh? meinst du den konstruktor-ohne-argumente, oder wird immer derjenige konstruktor der basisklasse aufgerufen, der überladen wurde?



  • Der Standardkonstruktor, der kann auch so auchsehen:

    MyClass::MyClass(int a=1);
    

    Gruß



  • k0mst schrieb:

    häh? meinst du den konstruktor-ohne-argumente, oder wird immer derjenige konstruktor der basisklasse aufgerufen, der überladen wurde?

    Es wird immer der Default-Ctor der Basisklasse aufgerufen (sprich: Der Ctor, den man ohne Argumente aufrufen kann), außer du gibst in der Initialisierungsliste einen anderen an.


Anmelden zum Antworten