А ну тогда все очень просто, материала полно
https://www.google.ru/search?q=cpp+vtable
Если вкратце, то у каждого объекта есть указатель на табличку с адресами своих виртуальных функций. Разные классы - разное содержимое табличек. Благодаря этому вызывается метод нужного класса для объекта по его таблице, а не по типу указателя.