解決: 仮想関数テーブルをコンパイラが作る
struct C { // void*** __vtbl; // = { &C::func }; virtual void func() { puts("C"); } }; struct D : public C { // void*** __vtbl; // = { &D::func }; virtual void func() { puts("D"); } }; int main() { C* c = new D(); // __vtbl[0](c); c->func(); // D::func }