C++ course Guide ( Руководство по курсу С++ часть _5) 101 по 126 101 -Порядок вызова деструкторов при наследовании. Деструкторы. ООП C++ Для начинающих. Урок #101 102 - Вызов конструктора базового класса из конструктора класса-наследника. Наследование. ООП C++ Урок#102 103 - Виртуальные методы класса c++. Ключевое слово virtual. Ключевое слово override. ООП. C++ Урок#103 104 - Абстрактный класс с++ пример. Чисто виртуальная функция. virtual. override. Полиморфизм ООП C++ Урок#104 105 - Виртуальный деструктор класса C++. Что это такое. Наследование. Полиморфизм. Для начинающих Урок#105 106 - Чисто виртуальный деструктор c++. Наследование. Полиморфизм. virtual. override. Для начинающих Урок#106 107 - Делегирующие конструкторы c++. Вызов конструктора из конструктора. ООП. С++ Для начинающих. Урок#107 108 - c++ вызов виртуального метода базового класса. ООП. Изучение с++ с нуля. Для начинающих. Урок #108 109 - Множественное наследование c++ пример. ООП. Изучение С++ с нуля для начинающих. Урок #109 110 - Порядок вызова конструкторов при множественном наследовании. ООП. С++ начинающих. Урок #110 111 - Порядок вызова деструкторов при множественном наследовании. ООП. С++ начинающих. Урок #111 112 - С++ множественное наследование одинаковые методы. ООП. Изучение С++ для начинающих. Урок #112 113 - Что такое интерфейс в ООП. Интерфейс c++ пример. Изучение С++ для начинающих. Урок #113 114 - Виртуальное наследование c++. Ромбовидное наследование c++. Изучение С++ для начинающих. Урок #114 115 - Работа с файлами с++. Запись в файл. c++ ofstream. Изучение С++ для начинающих. Урок #115 116 - Работа с файлами с++. Чтение из файла с++ ifstream. Изучение С++ для начинающих. Урок #116 117 - Запись ОБЪЕКТА КЛАССА в файл с++. Чтение объекта из файла c++ Для начинающих. Урок #117 118 - Чтение и запись в файл с++ используя класс fstream c++. Изучение С++ для начинающих. Урок #118 119 - Потоковый ввод вывод в файл c++. Перегрузка операторов. Изучение С++ для начинающих. Урок #119 120 - С++ try catch. Обработка исключений С++. try catch что это. Изучение С++ для начинающих. Урок #120 121 - Генерация исключений с++ пример. throw c++ пример. Изучение С++ для начинающих. Урок #121 122 - Несколько блоков catch. Обработка исключений С++. Изучение С++ для начинающих. Урок #122 123 - Свой класс exception c++. Создание собственного класса исключений. С++ для начинающих. Урок #123 124 - Перечисляемый тип enum С++. Изучение С++ для начинающих. Урок #124 125 - Пространства имен с++. namespace c++ что это. Изучение С++ для начинающих. Урок #125 126 - Шаблоны классов с++ примеры. Обобщенные классы. Изучение С++ для начинающих. Урок #126
Вопрос: можно ли вызывать виртуальные функции из конструктора или деструктора? Ответ: в общем случае не рекомендуется вызывать виртуальные функции в конструкторах и деструкторах, потому как вызов будет разрешен в контексте того класса, чей конструктор (или деструктор) выполняется в данный момент. Это может привести к потенциальным ошибкам. Код в примере ниже не выведет Derived::func() #include <iostream> class Base { public: Base() { std::cout << "Base::Base()\n"; func(); } virtual void func() { std::cout << "Base::func()\n"; } }; class Derived : public Base { public: Derived() { std::cout << "Derived::Derived()\n"; } void func() override { std::cout << "Derived::func()\n"; } }; int main() { Derived d; } p.s.: В рамках этого вопроса нужно быть готовым рассказать про проблему pure virtual call. #вопросы_к_собесу