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

Зміст курсу

C++ ООП

C++ ООП

1. Основи ООП у C++
2. Конструктори та Деструктори
3. Огляд Інкапсуляції
4. Огляд Наслідування
5. Огляд Поліморфізму

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

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

course content

Зміст курсу

C++ ООП

C++ ООП

1. Основи ООП у C++
2. Конструктори та Деструктори
3. Огляд Інкапсуляції
4. Огляд Наслідування
5. Огляд Поліморфізму

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