virtual methode in Ctor
-
Hi,
ich habe ein Problem mit einer virtuellen Methode, die ich gerne im Ctor aufrufen würde (was ja leider nicht geht):
class Base { proteced: virtual void createResourceA() = 0; // Das sollen die abgel. Klassen überschreiben public: Base() { createResourceA(); } // Nach dem Ctor Aufruf sollen die Resourcen angelegt sein }; class Derived1 : public Base { proteced: virtual void createResourceA() { lege resource A an ... } public: Derived1() { } };So bräuchte ich das, aber das geht ja nicht, da der Aufruf createResourceA() im Base Ctor leider nicht Derived1::createResourceA() aufruft. Gibt es da einen Trick/Hack, wie ich das lösen kann?
-
Ruf die Funktion doch einfach im ctor von Derived1 auf. Du sagst ja selbst:
// Nach dem Ctor Aufruf sollen die Resourcen angelegt sein
und das geht in Base einfach nicht.
-
luka-- schrieb:
Hi,
ich habe ein Problem mit einer virtuellen Methode, die ich gerne im Ctor aufrufen würde (was ja leider nicht geht):
class Base { proteced: virtual void createResourceA() = 0; // Das sollen die abgel. Klassen überschreiben public: Base() { createResourceA(); } // Nach dem Ctor Aufruf sollen die Resourcen angelegt sein }; class Derived1 : public Base { proteced: virtual void createResourceA() { lege resource A an ... } public: Derived1() { } };So bräuchte ich das, aber das geht ja nicht, da der Aufruf createResourceA() im Base Ctor leider nicht Derived1::createResourceA() aufruft. Gibt es da einen Trick/Hack, wie ich das lösen kann?
Oder mach es dir noch einfacher, und lege einfach eine init Funktion an, die jede Klasse implementieren muss.
class Base { public: virtual void init() = 0; }; class Stuff : public Base { public: virtual void init() { // load Stuff } };