Vererbung
-
Hallo,
werden Konstruktoren und Destruktoren bei der Vererbung automatisch mitvererbt ?
Normalerweise ja denn wenn ich die Basisklasse nicht kenne weiss ich ja auch nicht welche Konstruktoren sind hat.Kann ich den Konstruktor ueberschreiben ?
Danke
-
Klares Jain. Sie werden nicht vererbt, aber sie werden aufgerufen, wenn die Konstruktoren/Destruktoren der Kinder aufgerufen werden. Dieses Beispiel verdeutlicht das:
#include <iostream> using namespace std; class Base { public: Base(){ cout<<"Constructor: Base"<<endl;} ~Base(){ cout<<"Destructor : Base"<<endl;} }; class Derived: public Base { //Doing a lot of jobs by extending the functionality public: Derived(){ cout<<"Constructor: Derived"<<endl;} ~Derived(){ cout<<"Destructor : Derived"<<endl;} }; int main() { Derived(); }Wenn du übrigens vorhast, Polymorphie zu verwenden, solltest du Destruktoren vitual machen.
-
Das trifft aber nur auf Standardkonstruktoren zu, dass diese automatisch aufgerufen werden.
-
David_pb schrieb:
Das trifft aber nur auf Standardkonstruktoren zu, dass diese automatisch aufgerufen werden.
Dann führ mal mein Beispielprogramm aus und staune.
Meinst du vielleicht, dass der Basiskonstruktor keine Argumente haben darf? Das ist dann nämlich richtig.
-
SeppJ schrieb:
David_pb schrieb:
Das trifft aber nur auf Standardkonstruktoren zu, dass diese automatisch aufgerufen werden.
Dann führ mal mein Beispielprogramm aus und staune.
*Staun* Sag ich doch... Das gilt für Standardkonstrukturen! :p
SeppJ schrieb:
Meinst du vielleicht, dass der Basiskonstruktor keine Argumente haben darf? Das ist dann nämlich richtig.
aka Standard- oder Default Konstruktor?!
-
Ach jetzt habe ich editiert, während du geantwortet hast. Das sind ja wohl kaum Standardkonstruktoren, da ja mein Code ausgeführt wird.
-
SeppJ schrieb:
Ach jetzt habe ich editiert, während du geantwortet hast. Das sind ja wohl kaum Standardkonstruktoren, da ja mein Code ausgeführt wird.
Was denn sonst?

-
Es werden also beide Konstruktoren aufgerufen.
Der Konstruktor der Basisklasse zuerst , dann der Konstruktor der
abgeleiteten Klassen. Der KOnstruktor der abgeleiteten Klasse ist wohl derjenige der dann gueltig ist.
-
blurry33 schrieb:
Es werden also beide Konstruktoren aufgerufen.
Der Konstruktor der Basisklasse zuerst , dann der Konstruktor der
abgeleiteten Klassen. Der KOnstruktor der abgeleiteten Klasse ist wohl derjenige der dann gueltig ist.Wieso gültig? Es werden doch beide durchlaufen.
-
SeppJ schrieb:
Das sind ja wohl kaum Standardkonstruktoren, da ja mein Code ausgeführt wird.
Du verwechselst da was.
- Standardkonstruktor = Konstruktor, der mit 0 Argumenten aufgerufen werden kann (also entweder 0 Parameter oder alles Defaultparameter).
- Standardmässig generierter Konstruktor = Konstruktor, der vom Compiler erzeugt wird, falls man keinen eigenen definiert.