Решение:
Виртуальная функция отличается от обычной тем, что её вызов определяется во время выполнения программы (динамически), а не во время компиляции. Это позволяет объектам разных классов, но одного базового типа, вызывать разные реализации одной и той же функции.
Рассмотрим варианты:
- может быть вызвана только через объект — это свойственно как виртуальным, так и невиртуальным методам.
- разрешает перегрузку — перегрузка функций (одинаковые имена, разные параметры) не связана напрямую с виртуальностью.
- выбирается в момент компиляции — это характеристика невиртуальных функций.
- позволяет переопределение и вызывает правильную версию во время выполнения — это ключевая особенность виртуальных функций.
Ответ: позволяет переопределение и вызывает правильную версию во время выполнения.