Frage zur Vererbung, Konstruktoren und Funktionpointer
-
Wenn eine Klasse B von einer Klasse A abgeleitet wird, und
im Konstruktor der Klasse A einem Funktionpointer(Member von Klasse A) eine Funktion zugewiesen wird, und
eine Instanz der Klasse B erzeugt wird,zeigt dann der geerbte Funktionpointer diese Instanz der Klasse B auf die Funktion welche im Konstruktor der Klasse A zugeweisen wurde?
Ändert sich daran etwas, wenn die Klasse B den Standardkonstruktor überschreibt?
-
KFlash schrieb:
zeigt dann der geerbte Funktionpointer diese Instanz der Klasse B auf die Funktion welche im Konstruktor der Klasse A zugeweisen wurde?
JA! (?)
KFlash schrieb:
Ändert sich daran etwas, wenn die Klasse B den Standardkonstruktor überschreibt?
Welchen Standardkonstruktor ? Den von A ?
Wenn ja NEIN. Du kannst den Konstruktor von A nicht in B neu definieren, dazu müsste er virual sein, ABER Konstuktoren können nicht virual sein
Hoffe mal das meintest du

-
Ok...
Nochwas... zum Thema Konstruktoren.KlasseB::KlasseB() ruft ja automatisch den Standartkonstruktor von KlasseA auf (falls dieser existiert...wenn nicht wird ... was wird dann eigentlich gemacht? Compilerfehler?)
Wenn jetzt KlasseB aber noch einen anderen konstruktor hat, z.B. den hier
KlasseB::KlasseB(int i) und in der KlasseA so ein Konstruktor nicht existiert, wird dann auch der Standardkonstruktor aufgerufen, oder auch ein Fehler wie oben?(Wie man nen Vorgängerkonstuktor ruft weis ich glaub ich. Hab ich von hier:
http://www.willemer.de/informatik/cpp/cpperben.htm (siehe Kaskadierende Konstruktoren) )
-
KlasseB::KlasseB() ruft ja automatisch den Standartkonstruktor von KlasseA auf (falls dieser existiert...wenn nicht wird ... was wird dann eigentlich gemacht? Compilerfehler?)
Nein kein Compilerfehler
Der Compiler erzeugt für A einen eigenen Standardkonstuktor. Der dann halt eigentlich nichts macht 
Wenn jetzt KlasseB aber noch einen anderen konstruktor hat, z.B. den hier
KlasseB::KlasseB(int i) und in der KlasseA so ein Konstruktor nicht existiert, wird dann auch der Standardkonstruktor aufgerufen?Ja, wenn aber A auch so einen Konstruktor hat KlasseA::KlasseA(int i) und du willst ihn aufrufen, musst du sowas machen

Klasse B(int i) : A(i) { }Also gibst du das i weiter an den Konstruktor von A(int i);
Und ohne ein KlasseA::KlasseA(int i) würde das intern so aussehen:
Klasse B(int i) : A() { }
EDIT::Yuhhuuu() { std::cout <<"Beitrag Nr. 200 geschafft; }