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?