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::fooEs ist also in aller Regel besser, sich von solchen Schweinereien fernzuhalten.
-
seldon schrieb:
...
Vielen dank!