Зміст курсу
C++ ООП
C++ ООП
Конструктор і Деструктор у Спадкуванні
Спочатку конструктор базового класу
У контексті наслідування конструктори відіграють важливу роль у правильній ініціалізації похідних класів. Розуміння послідовності виклику конструкторів є ключовим для засвоєння динаміки наслідування. Ознайомтеся з результатом виконання наведеного нижче фрагмента коду, щоб побачити порядок виклику конструкторів.
main.cpp
#include <iostream> class Base { public: Base() { std::cout << "Base constructor called" << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "Derived constructor called" << std::endl; } }; int main() { Derived derivedObj; }
Після завершення ініціалізації конструктором базового класу, виконується конструктор похідного класу.
Базовий клас викликається першим, оскільки він має ініціалізувати успадковані члени підкласу. Це гарантує, що підклас починає роботу з коректним станом і може покладатися на ініціалізований стан свого базового класу.
main.cpp
class Base { public: Base(int value) : data(value) {} private: int data; }; class Derived : public Base { public: Derived(int value) : Base(value) {} }; int main() { }
У цьому прикладі конструктор із параметрами викликається у списку ініціалізації. Необхідно явно викликати конструктор базового класу у списку ініціалізації конструктора підкласу. Якщо у списку ініціалізації не вказати конструктор базового класу, конструктор за замовчуванням базового класу буде викликано автоматично.
Деструктор похідного класу викликається першим
Під час знищення об'єкта деструктори викликаються у зворотному порядку до їхніх конструкторів. Це означає, що деструктор спочатку викликається для найбільш похідного класу, а потім для кожного базового класу у зворотному порядку їх оголошення.
main.cpp
#include <iostream> class Base { public: ~Base() { std::cout << "Base destructor called" << std::endl; } }; class Derived : public Base { public: ~Derived() { std::cout << "Derived destructor called" << std::endl; } }; int main() { Derived derivedObj; }
Лише після завершення очищення деструктора похідного класу викликається деструктор базового класу.
Дякуємо за ваш відгук!