Vererbung - virtual function Aufruf
-
Guten Morgen,
ich steh grad iwie mächtig auf dem Schlauch, denn ich bin mir sicher, es ist ganz einfach...
Ich habe eine Basisklasse und eine, die davon erbt:class test { public: test() { OnInstanceAdding(); } protected: virtual void OnInstanceAdding() { //wird aufgreufen } }; class blubb : public test { protected: void OnInstanceAdding() { //wird nicht aufgerufen... } };in main:
blubb b;warum wird die überschriebene Funktion OnInstanceAdding in blubb nicht aufgerufen??
Gruß
tsp
-
Weil zum Zeitpunkt des test()-Konstruktors nur ein test-Objekt vorliegt und noch kein blubb.
Merk dir: Man ruft in Konstruktoren und Destruktoren keine virtuellen Funktionen auf!// edit:
Als Lösung kannst du dir eine Factory-Funktion schreiben, die erst ein Objekt instantiiert, und danach die virtuelle(n) Funktion(en), die zum Initialisieren notwendig sind, aufruft, und das Objekt dann natürlich zurückgibt. So gehst du sicher, dass das Objekt korrekt initialisiert ist, und vermeidest virtuelle Funktionen im Konstruktor.
-
AAah, ja logo, mann, Montagmorgen....
Dank dir