Стандарт C ++ не определяет, как должен реализовываться механизм виртуальных функций.
Тем не менее, я думаю, что все текущие компиляторы C ++ используют виртуальные таблицы.
Обычный способ сделать это для классов, которые содержат хотя бы одну виртуальную функцию, чтобы иметь скрытый указатель на так называемую виртуальную таблицу,где адреса виртуальных функций для определенного класса вводятся в определенном для компилятора порядке.
Каждый конструктор затем устанавливает этот скрытый указатель на виртуальную таблицу класса, которому он принадлежит.