ДИНАМИЧЕСКИЕ ОБЪЕКТЫОбъектныепеременные вo многом подобны обычным переменным Турбо Паскаля, в частности, ихможно размещать в динамической памяти. Турбо Паскаль содержит средства,облегчающие размещение объектных переменных в куче и их удаление из нее,например varPline Tline New Pline,Init В этом примере размещение объектной переменной на нее указывает PLINE в куче сопровождается одновременным обращением к конструктору
TLINE.INIT дляинициализации объекта и связывания виртуальных методов с вновь созданнойпеременной в процедуре NEW допускается в качестве второго параметра указыватьобращение к конструктору.Более того,процедуру NEW можно вызывать и как функцию - в этом случае она возвращаетзначение типа POIInit Обратите внимание первым параметром процедуре
New передается указательна динамически распределяемый объект, в то время как первым параметром функцииNEW - тип распределяемого объекта. И в том, и в другом случае в качестве второмпараметра обращения допускается использовать вызов конструктора, однако имяконструктора не может быть составным -ведь в момент обращения динамический объектеще не создан. Например, операторNew Pline,PLine .Init вызовет сообщение об ошибке.При обращении к
NEW с одновременным вызовом конструктора динамическаяпамять резервируемая с помощью специального программного кода, входящего влюбой конструктор и вызываемого до начала работы исполняемой части конструктора до begin . При этом динамическая память может оказаться исчерпанной. В этомслучае стандартная функция обработки ошибок администратора кучи выдает значение0, что вызывает аварийное завершение программы с кодом ошибки 203.
Еслииспользуется нестандартная функция обработки ошибок и эта функция возвращает 1,конструктор пропускает операторы после begin и возвращает NIL. Таким образомгарантируется, что исполняемые операторы конструктора будут работать только приусловии нормального распределения динамической памяти. Однако в телеконструктора может быть создан новый динамический объект, в нем - свой и т.д.Турбо Паскальдопускаетпроизвольную глубину вложенности конструкторов.
Если на каком-то уровнеобнаружится нехватка динамической памяти, необходимо ликвидировать всю цепочкууспешно распределенных объектов. Чтобы эта операция стала возможной, в ТурбоПаскаль введена стандартная процедура без параметров FAIL, которая можетвызываться только из конструктора и которая освобождает уже выделеннуюконструктором память, завершает его работу и возвращает NIL.Для удаления динамического объекта из кучи используется
особый метод -деструктор, описываемый с помощью зарезервированного слова DESTRUCTOR. В этомметоде можно предусмотреть все действия, связанные с ликвидацией динамическогообъекта т.е. переменной объектного типа, размещенной в динамической памяти ,например, осуществить нужную коррекцию списка динамических объектов. Обращениек деструктору указывается вторым параметром при вызове процедуры DISPOSE,например typeTLine object Point ConstructorInit
DestructorDone end New PLine,Init Размещениединамического объекта Dispose PLine,Done Удаление динамического объекта При необходимости деструктор, как и любой другой метод объекта кроме конструктора можнообъявить виртуальным.
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |