Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
6
Как виртуальные функции и деструкторы влияют на порядок вывода при удалении через указатель базового класса
Условие задачи
Вопрос: какой набор строк будет выведен программой, учитывая особенности работы виртуальных функций, последовательность вызовов конструкторов и деструкторов, а также поведение при удалении объекта через указатель базового типа.
# include <iostream>
struct Base {
Base() { print(); }
virtual void print() { std::cout << "Base" << std::endl; }
virtual ~Base() { print(); }
};
struct Derived : Base {
Derived() { print(); }
virtual void print() { std::cout << "Derived" << std::endl; }
virtual ~Derived() { print(); }
};
int main(int argc, char** argv) {
Base* ptr = new Derived();
ptr->print();
delete ptr;
}
Разберите, как происходит вызов print в конструкторе базового класса, как переопределяется метод в производном классе, и какие функции будут выполнены при разрушении объекта, когда удаление происходит через указатель базового типа.