virtual Verständnisfrage



  • Wenn die Basisklasse die Funktion 'foo()' nicht als virtual deklariert hat, dann darf ich sie auch nicht in der Subklasse als virtual deklarieren. Richtig?



  • Darfst du schon, es macht aber die Methode in A nicht auf magische Weise virtuell, was zu merkwürdigen Ergebnissen führen kann. Beispiel:

    #include <iostream>
    
    struct A {
      virtual ~A() { }
      void foo() { std::cout << "A::foo" << std::endl; }
    };
    
    struct B : public A {
      virtual void foo() { std::cout << "B::foo" << std::endl; }
    };
    
    struct C : public B {
      virtual void foo() { std::cout << "C::foo" << std::endl; }
    };
    
    int main() {
      C c;
    
      B &rb = c;
      A &ra = c;
    
      rb.foo();
      ra.foo();
    }
    
    // Ausgabe:
    //
    // C::foo
    // A::foo
    

    Es ist also in aller Regel besser, sich von solchen Schweinereien fernzuhalten.



  • seldon schrieb:

    ...

    Vielen dank!


Anmelden zum Antworten