解決: 仮想関数テーブルをコンパイラが作る
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
}