struct A { virtual void print(){cout << "A\n"} }; struct B : A { void print(){cout << "B\n"} }; A* p = new B; p->print(); // Bと表示される。
p->print(); → (p->*(p->vfptr[0]))();というように変形されているように呼び出される。 ([0]は仮想関数テーブルの1番目の関数を意味している。)
void func(){print();} → void func(){this->print();}