Мы используем файлы cookie
Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
Виртуальная функция позволяет реализовать полиморфизм во время выполнения. Когда вызывается виртуальная функция объекта, фактическая вызываемая версия функции определяется типом объекта, на который указывает указатель или ссылка, а не типом указателя или ссылки.
Для реализации этого механизма компилятор добавляет к каждому объекту класса с виртуальными функциями скрытый указатель — vptr (virtual pointer). Этот указатель указывает на таблицу виртуальных функций — vtable (virtual table).
vtable — это статическая таблица, общая для всех объектов данного класса, которая содержит указатели на реализации виртуальных функций этого класса. Для производного класса, который переопределяет виртуальные функции, его vtable содержит указатели на переопределенные версии. Если производный класс не переопределяет виртуальную функцию, его vtable содержит указатель на версию из базового класса.
При вызове виртуальной функции через указатель или ссылку компилятор генерирует код, который:
c
Виртуальная функция позволяет реализовать полиморфизм во время выполнения. Когда вызывается виртуальная функция объекта, фактическая вызываемая версия функции определяется типом объекта, на который указывает указатель или ссылка, а не типом указателя или ссылки.
Для реализации этого механизма компилятор добавляет к каждому объекту класса с виртуальными функциями скрытый указатель — vptr (virtual pointer). Этот указатель указывает на таблицу виртуальных функций — vtable (virtual table).
vtable — это статическая таблица, общая для всех объектов данного класса, которая содержит указатели на реализации виртуальных функций этого класса. Для производного класса, который переопределяет виртуальные функции, его vtable содержит указатели на переопределенные версии. Если производный класс не переопределяет виртуальную функцию, его vtable содержит указатель на версию из базового класса.
При вызове виртуальной функции через указатель или ссылку компилятор генерирует код, который:
c
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.