Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Constructor and Destructor in Inheritance | Огляд наслідування
ООП C++

Constructor and Destructor in Inheritance

Свайпніть щоб показати меню

Спочатку конструктор базового класу

У контексті наслідування конструктори відіграють важливу роль у правильній ініціалізації похідних класів. Розуміння послідовності виклику конструкторів є ключовим для засвоєння динаміки наслідування. Перегляньте результат виконання наведеного нижче фрагмента коду, щоб побачити порядок виклику конструкторів.

main.cpp

main.cpp

12345678910111213141516
#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; }
Note
Примітка

Після завершення ініціалізації конструктором базового класу виконується конструктор похідного класу.

Базовий клас викликається першим, оскільки він має ініціалізувати успадковані члени підкласу. Це гарантує, що підклас починає з коректного стану та може покладатися на ініціалізований стан свого базового класу.

main.cpp

main.cpp

123456789101112131415161718
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

main.cpp

12345678910111213141516
#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; }
Note
Примітка

Лише після завершення роботи деструктора похідного класу викликається деструктор базового класу.

question mark

Який правильний порядок виклику конструкторів і деструкторів при створенні та знищенні об'єкта похідного класу?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 4

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 4. Розділ 4
some-alt