Sobes.tech
Back to questions
Junior — Middle
94

Объясните принцип виртуальных функций в языке C++ и как они реализуются во время выполнения программы.

Answer from AI

sobes.tech AI

Виртуальные функции в C++ позволяют реализовать полиморфизм — возможность вызывать методы производных классов через указатели или ссылки на базовый класс.

Когда функция объявлена с ключевым словом virtual в базовом классе, компилятор создает для этого класса таблицу виртуальных функций (vtable). Эта таблица содержит указатели на функции, которые должны вызываться для объектов данного класса.

Во время выполнения, при вызове виртуальной функции через указатель или ссылку на базовый класс, программа обращается к 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* b = new Derived();
    b->show(); // Выведет "Derived show" благодаря виртуальной функции
    delete b;
    return 0;
}

Таким образом, виртуальные функции реализуют механизм динамического связывания, позволяя программе выбирать нужную функцию во время выполнения.