関数 hoge は、p が c1 のインスタンスであるときには c1::func を呼び、p が c2 のインスタンスであるときには c2::func を呼ぶ必要があります。これを実現するための一つの方法が VTable です。実際にどうやって実装されているかは後述するとして、イメージを簡単に説明すると以下のような仕組みです。 クラス毎に、そのクラスの仮想関数へのポインターを集めたテーブルを作り、これを VTable と呼ぶことにします。上記例の c1, c2 であれば、以下のような配列 vtable_c1, vtable_c2 を予め作っておくイメージです。このとき、関数毎にインデックスを決めて、そのインデックスはクラス間でも共通になるようにします。ここでは例えば、func 関数は VTable の先頭に配置することにします。 クラスのインスタンスを作るとき、その VTable へのポイ