Пример 3.32. Обработка

Название книги: 
Объектно- ориентированное программирование
Автор: 
Г.С.Иванова, Т.Н.Ничушкина, Е.К.Пугачев

Пример
3.32. Обработка массива динамических объектов. Рассмотрим программу, создающую массив из пяти
динамических объектов в виде массива указателей на эти объекты и массив из трех
объектов через указатель на первый объект массива.

 Необходимо отметить также
особенности работы с динамическими объектами классов, входящих в некоторую
иерархию. Как уже отмечалось, С++ позволяет присваивать указателям на базовый
класс, значение указателей на любой из производных от него. В этом случае
возникают проблемы с доступом к полям объекта, описанным в производном классе:

-                    
указатель
на объект базового класса связан с описанием его полей, и поля, описанные в
производном классе для него «невидимыми» (рис 1.25). Поэтому при обращении через указатель на
базовый класс к полям производного объекта необходимо средствами языка явно переопределить
(«привести») тип указателя;

-                    
кроме
того, если при определении указателя на базовый класс создается динамический
объект производного класса, то во время уничтожения такого объекта вызывается
деструктор лишь базового класса и память освобождается не корректно, так как
деструктор не может правильно определить размеры освобождаемой памяти. Эта
проблема решается применением виртуального деструктора. Если при объявлении
деструктора базового класса описать его как virtual, то все конструкторы производного класса также будут
виртуальными. При уничтожении объекта с помощью оператора delete через указатель на базовый класс будут корректно
вызваны деструкторы всех производных классов. Все эти особенности имеют место и
при работе с полиморфными объектами (раздел 3.4)

Страница: 
150

Г.С.Иванова, Т.Н.Ничушкина, Е.К.Пугачев: Объектно- ориентированное программирование. Часть 1.