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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage