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
      }
    };
    

Anmelden zum Antworten