質問です
CHoge ← CChild
という継承を行い、CChildで virtual int test() という関数をオーバーライドしたとします

この状態で
p = new CChild();
とやり、CHogeのコンストラクタでtest()を呼び出したとしても、オーバーライドされていないtest()が呼び出されますよね

この実装自体は別に構わないのですが、何故このような仕組みになっているのでしょうか?
コンパイラ的には、オーバーライドされたほうを呼び出させることは難しくないと思います
(CChildのコンストラクタの頭でCHogeのコンストラクタを呼ぶ前に、vtblだけは初期化してしまえばいいですよね)
事実、Javaはオーバーライドされたほうのtestが呼ばれます

何故C++では、オーバーライド前のtest()を呼ぶ仕組みになっているのでしょうか?