実行時にどちらを指してるか判断して、それようの方を呼ぶ機構がvirtualによるオーバーライドなのではないのですか?
今は基本クラスのオブジェクトを指してる筈だから、基本クラスのvirtualついた方を呼ぶべきだと思います><