Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Конструктор і Деструктор у Спадкуванні | Огляд Наслідування
C++ ООП

bookКонструктор і Деструктор у Спадкуванні

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

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

main.cpp

main.cpp

copy
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

copy
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

copy
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

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

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Suggested prompts:

Can you provide an example code snippet to illustrate this?

Why is it important for the base class constructor to run before the derived class constructor?

What happens if the base class doesn't have a default constructor?

Awesome!

Completion rate improved to 3.13

bookКонструктор і Деструктор у Спадкуванні

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

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

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

main.cpp

main.cpp

copy
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

copy
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

copy
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

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

Select the correct answer

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

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

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

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