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