Wskaźniki do wirtualnych funkcji składowych. Jak to działa?

Rozważ następujący kod C ++:

class A
{
public:
      virtual void f()=0;
};


int main()
{
     void (A::*f)()=&A::f;
}

Gdybym musiał zgadywać, powiedziałbym, że & A :: f w tym kontekście oznaczałoby „adres implementacji f () przez A”, ponieważ nie ma wyraźnego oddzielenia wskaźników do regularnych funkcji składowych i wirtualnych funkcji składowych . A ponieważ A nie implementuje f (), byłby to błąd kompilacji. Jednak tak nie jest.

I nie tylko to. Poniższy kod:

void (A::*f)()=&A::f;
A *a=new B;            // B is a subclass of A, which implements f()
(a->*f)();

faktycznie wywoła B :: f.

Jak to się stało?

questionAnswers(3)

yourAnswerToTheQuestion