virtual vor einer Methode



  • Hallo, was bedeutet wenn vor einer Methode in einer Klasse "virtual" steht, also

    virtual void set(int h, int m);
    

    ??





  • Das bedeutet, dass diese Methode einen Eintrag im vtable der Klasse erhält. Abgeleitete Klassen können diese Methode "überschreiben". Letzteres bedeutet, dass man über eine(n) Basisklassenzeiger oder -referenz die Methode der konkreten Klasse aufrufen kann.

    class Base {
    public:
       virtual void func() { std::cout << "Base::func"; }
       virtual ~Base() {}
    };
    
    class Derived : public Base
    {
    public:
       void func() override { std::cout << "Derived::func"; } 
    };
    
    void CallFunc( Base& base )
    {
       base.func();
    }
    
    int main()
    {
       Base base;
       Derived deriv;
    
       CallFunc( base );   // "Base::func"
       CallFunc( deriv );  // "Derived::func"
    }
    

  • Mod

    Decimad schrieb:

    Das bedeutet, dass diese Methode einen Eintrag im vtable der Klasse erhält.

    Wie das technisch abläuft ist nicht weiter spezifiziert. Es gibt auch andere Methoden.



  • Danke für die Korrektur. Ich wollte den Begriff vtable aber auf jeden Fall genannt haben, hätte ich bloß anders tun sollen.


Anmelden zum Antworten