В C++ виртуальная функция — это функция-член, объявленная в базовом классе и предназначенная для переопределения производными классами. Он позволяет динамическую привязку вызова функции во время выполнения, обеспечивая полиморфное поведение.
Вот несколько методов, связанных с виртуальными функциями в C++:
-
Объявление виртуальной функции. Чтобы объявить виртуальную функцию, вы используете ключевое слово
virtualв объявлении функции в базовом классе. Например:class Base { public: virtual void virtualFunction() { // Function implementation } }; -
Переопределение виртуальной функции. Чтобы переопределить виртуальную функцию в производном классе, вы используете ту же сигнатуру функции и ключевое слово
override. Например:class Derived : public Base { public: void virtualFunction() override { // Overridden function implementation } }; -
Виртуальные деструкторы. Если у вас есть базовый класс с виртуальными функциями, рекомендуется объявить виртуальный деструктор. Это гарантирует, что деструктор производного класса вызывается правильно при удалении объекта производного класса через указатель на базовый класс. Например:
class Base { public: virtual ~Base() { // Destructor implementation } }; -
Чистые виртуальные функции. Чисто виртуальная функция — это виртуальная функция, которая объявлена в базовом классе, но не имеет реализации. Он должен быть переопределен производными классами. Базовый класс становится абстрактным классом, и объекты базового класса не могут быть созданы. Например:
class AbstractBase { public: virtual void pureVirtualFunction() = 0; // Pure virtual function }; -
Вызов виртуальной функции: когда вы вызываете виртуальную функцию через указатель или ссылку базового класса, выполняемая функция зависит от фактического типа объекта. Это известно как динамическая отправка или позднее связывание. Например:
Base* ptr = new Derived(); ptr->virtualFunction(); // Calls the overridden function in Derived