Verdeckung von virtuellen Methoden
-
Hallo liebe C++ Commu,
ich mache mir z.z. Gedanken über das Verdecken (v) und Redefinieren (r) von virtuellen Methoden und habe hierzu auch einige listening gemacht, welche ich soweit verstehe bis auf eines, da mach ich heute nun schon ewig rum.
Volgendes Bsp. habe ich gemacht
class A { public: virtual void f() { cout << "A::f()" << endl; g(); } //(v)(r1) virtual void g() { cout << "A::g()" << endl; } //(r2) }; class B : public A { public: virtual void f(int i) { cout << "B::f(int)" << endl; }//(v) }; class C : public B { public: virtual void f() { cout << "C::f()" << endl; A::f(); }//(r1) virtual void g() { cout << "C::g()" << endl; } //(r2) };
<in der Main habe ich volgendes
int main() { C c; A * aptr = &c; B * bptr = &c; C * cptr = &c; bptr->f(1); // Aufruf von B::f(int) -> kann ich nachvolziehen bptr->A::f(); // Aufruf von A::f() und C::g() -> auch klar wegen der Funktion g() in A::f() c.f(); // Blicke ich Null die Konsole sagt: C::f(), A::f() und C::g()??? return 0; }
Also "Zeile 11" besagt doch: Rufe c.f() auf, darin ist doch C::f() und A::f() basta und kein C::g mehr.
Eventuel kann mir jm. einen Anstoß geben. Danke und schöne Grüße an euch.
-
A::f ruft doch wieder g auf und das ist in diesem Fall das C::g.