Производные объекты
Введение
Производные объекты в C++ наследуют свойства и методы базового класса. Конструирование и уничтожение таких объектов происходит в определенном порядке, который гарантирует корректную инициализацию и освобождение ресурсов.
Конструирование производных объектов
Порядок вызова конструкторов
При создании производного объекта сначала вызывается конструктор базового класса, затем конструктор производного класса. Это гарантирует, что все члены базового класса будут инициализированы до начала инициализации членов производного класса.
Пример: Конструирование производного объекта
Вывод
В этом примере при создании объекта d
класса Derived
сначала вызывается конструктор базового класса Base
, а затем конструктор производного класса Derived
. При уничтожении объекта сначала вызывается деструктор производного класса, затем деструктор базового класса.
Инициализация членов производного класса
Инициализация через список инициализации
Члены производного класса могут быть инициализированы с помощью списка инициализации, который также используется для инициализации членов базового класса.
Пример: Инициализация членов базового и производного классов
Вывод
В этом примере список инициализации используется для передачи значений конструкторам базового и производного классов.
Уничтожение производных объектов
Порядок вызова деструкторов
При уничтожении производного объекта сначала вызывается деструктор производного класса, затем деструктор базового класса. Это гарантирует, что все ресурсы, выделенные производным классом, будут освобождены перед освобождением ресурсов базового класса.
Важные замечания
- Деструкторы должны быть виртуальными в базовом классе, если предполагается использование полиморфизма, чтобы гарантировать правильный вызов деструкторов производных классов.
- Если в производном классе выделяются ресурсы (например, динамическая память), их необходимо корректно освобождать в деструкторе.
Пример: Виртуальные деструкторы
Вывод
В этом примере виртуальный деструктор базового класса гарантирует, что при удалении объекта через указатель базового класса будет вызван деструктор производного класса.
Резюме
- Конструирование производного объекта: сначала вызываются конструкторы базового класса, затем производного.
- Уничтожение производного объекта: сначала вызываются деструкторы производного класса, затем базового.
- Инициализация через список инициализации: используется для передачи значений конструкторам базового и производного классов.
- Виртуальные деструкторы: важны для корректного освобождения ресурсов в полиморфных структурах.