Виртуальная функция — это функция-член, объявленная в базовом классе, которую могут переопределить производные классы. Она обеспечивает полиморфное поведение, позволяя вызывать правильный метод производного класса через указатель или ссылку на базовый класс.
Виртуальные функции реализуют полиморфизм времени выполнения, гарантируя, что нужный метод выполнится в зависимости от реального типа объекта, а не от типа указателя. Без виртуальных функций компилятор использует статическое связывание, вызывая метод базового класса независимо от реального объекта.
class Parent {
void Show() { cout << "I'm parent" << endl; }
};
class Child : public Parent {
void Show() { cout << "I'm child" << endl; }
};
Parent* ptr = new Child();
ptr->Show(); // Вызывает Parent::Show() - НЕПРАВИЛЬНО!
class Parent {
virtual void Show() { cout << "I'm parent" << endl; }
};
class Child : public Parent {
void Show() { cout << "I'm child" << endl; }
};
Parent* ptr = new Child();
ptr->Show(); // Вызывает Child::Show() - ПРАВИЛЬНО!
virtual указывай только в объявлении базового классаoverride для ясности (C++11+)Виртуальные функции обеспечивают динамическую привязку, что означает, что правильный метод производного класса определяется во время выполнения на основе фактического типа объекта, а не типа указателя.
Новый — ещё не проверен сообществом
Вы