Объясните принцип виртуальных функций в языке 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;
}
Таким образом, виртуальные функции реализуют механизм динамического связывания, позволяя программе выбирать нужную функцию во время выполнения.