Sobes.tech
Junior — Middle
106

Magyarázza el a virtuális függvények táblájának fogalmát az objektumorientált programozásban.

Válasz az MI-től

sobes.tech MI

Таблица виртуальных функций (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, благодаря таблице виртуальных функций.