Назад к задачам
Junior — Senior
6

Как виртуальные функции и деструкторы влияют на порядок вывода при удалении через указатель базового класса

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

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

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