Zeiger auf virtuelle Memberfunktionen. Wie funktioniert es?
Betrachten Sie den folgenden C ++ - Code:
class A
{
public:
virtual void f()=0;
};
int main()
{
void (A::*f)()=&A::f;
}
Wenn ich raten müsste, würde ich sagen, dass & A :: f in diesem Kontext "die Adresse von A's Implementierung von f ()" bedeuten würde, da es keine explizite Trennung zwischen Zeigern auf reguläre Mitgliedsfunktionen und virtuellen Mitgliedsfunktionen gibt . Und da A f () nicht implementiert, wäre das ein Kompilierungsfehler. Ist es aber nicht.
Und nicht nur das. Der folgende Code:
void (A::*f)()=&A::f;
A *a=new B; // B is a subclass of A, which implements f()
(a->*f)();
wird tatsächlich B :: f aufrufen.
Wie ist es passiert?