Объясните концепцию таблицы виртуальных функций в объектно-ориентированном программировании.
Answer from AI
sobes.tech AI
Таблица виртуальных функций (vtable) — это механизм, который используется в C++ для реализации полиморфизма через виртуальные функции. Когда класс содержит виртуальные методы, компилятор создаёт для него специальную таблицу указателей на эти функции. Каждый объект такого класса содержит скрытый указатель на эту таблицу.
При вызове виртуальной функции через указатель или ссылку на базовый класс программа обращается к vtable, чтобы определить, какую именно версию функции вызвать — базовую или переопределённую в производном классе. Это позволяет реализовать динамический (рантайм) полиморфизм.
Пример:
#include <iostream>
class Base {
public:
virtual void show() { std::cout << "Base show" << std::endl; }
};
class Derived : public Base {
public:
void show() override { std::cout << "Derived show" << std::endl; }
};
int main() {
Base* obj = new Derived();
obj->show(); // Вызовет Derived::show благодаря vtable
delete obj;
return 0;
}
Здесь вызов obj->show() во время выполнения определяет, что нужно вызвать метод из класса Derived, а не из Base, благодаря таблице виртуальных функций.