| Главная » Статьи » Математика, алгебра, геометрия | [ Добавить статью ] |
|
Объектные переменные вo многом подобны обычным переменным Турбо Паскаля, в частности, их можно размещать в динамической памяти. Турбо Паскаль содержит средства, облегчающие размещение объектных переменных в куче и их удаление из нее, например: var Pline: ^Tline; ....... New(Pline, Init): ....... В этом примере размещение объектной переменной (на нее указывает PLINE) в куче сопровождается одновременным обращением к конструктору TLINE.INIT для инициализации объекта и связывания виртуальных методов с вновь созданной переменной: в процедуре NEW допускается в качестве второго параметра указывать обращение к конструктору. Более того, процедуру NEW можно вызывать и как функцию - в этом случае она возвращает значение типа POINTER, указывающее на динамически распределенный объект: PLine := New(TLine); или PLine := New(TLine, Init): Обратите внимание: первым параметром процедуре New передается указатель на динамически распределяемый объект, в то время как первым параметром функции NEW - тип распределяемого объекта. И в том, и в другом случае в качестве втором параметра обращения допускается использовать вызов конструктора, однако имя конструктора не может быть составным -ведь в момент обращения динамический объект еще не создан. Например, оператор New(Pline, PLine^.Init); вызовет сообщение об ошибке. При обращении к NEW с одновременным вызовом конструктора динамическая память резервируемая с помощью специального программного кода, входящего в любой конструктор и вызываемого до начала работы исполняемой части конструктора (до begin). При этом динамическая память может оказаться исчерпанной. В этом случае стандартная функция обработки ошибок администратора кучи выдает значение 0, что вызывает аварийное завершение программы с кодом ошибки 203. Если используется нестандартная функция обработки ошибок и эта функция возвращает 1, конструктор пропускает операторы после begin и возвращает NIL. Таким образом гарантируется, что исполняемые операторы конструктора будут работать только при условии нормального распределения динамической памяти. Однако в теле конструктора может быть создан новый динамический объект, в нем - свой и т.д. Турбо Паскаль допускает произвольную глубину вложенности конструкторов. Если на каком-то уровне обнаружится нехватка динамической памяти, необходимо ликвидировать всю цепочку успешно распределенных объектов. Чтобы эта операция стала возможной, в Турбо Паскаль введена стандартная процедура без параметров FAIL, которая может вызываться только из конструктора и которая освобождает уже выделенную конструктором память, завершает его работу и возвращает NIL. Для удаления динамического объекта из кучи используется особый метод - деструктор, описываемый с помощью зарезервированного слова DESTRUCTOR. В этом методе можно предусмотреть все действия, связанные с ликвидацией динамического объекта (т.е. переменной объектного типа, размещенной в динамической памяти), например, осуществить нужную коррекцию списка динамических объектов. Обращение к деструктору указывается вторым параметром при вызове процедуры DISPOSE, например: .......... type TLine = object(Point) ...... Constructor Init; Destructor Done; end; ....... New(PLine, Init); {Размещение динамического объекта} ....... Dispose(PLine, Done); {Удаление динамического объекта} ....... При необходимости деструктор, как и любой другой метод объекта (кроме конструктора!), можно объявить виртуальным. |
Чтобы скачать материал, пожалуйста, авторизуйтесь или зарегистрируйтесь! Это быстро ! )
Категории
| Математика, алгебра, геометрия [1729] |
| Книги (Это интересно) [351] |
| Видеоуроки [26920] |
| География [2660] |
| Дополнительное образование [401] |
| ЕГЭ/ГИА [266] |
| Информатика [1187] |
| История / обществознание [4663] |
| Для Логопеда [500] |
| Материалы для коррекц. классов [400] |
| ОБЖ [558] |
| Презентации [402] |
| Для Психолога [514] |
| Физическая культура [529] |
| Черчение [121] |
| Шаблоны презентаций [466] |
| Для Библиотекаря [160] |
| Праздники [419] |
| Интересные Видеоролики [12] |
| Английский язык [791] |
| Иностранные языки (прочие) [461] |
| Окружающий мир [873] |
| Биология и экология [1643] |
| Всем учителям [508] |
| Для директора и завуча [1042] |
| Дошкольное образование [1238] |
| Искусство [804] |
| Для Классного руководителя [543] |
| Начальные классы [718] |
| Основы религиозных культур [137] |
| Программы и Софт [21] |
| Родной язык [505] |
| Русский язык и литература [3915] |
| Технология [1000] |
| Физика [1263] |
| Химия [1297] |
| Экономика [905] |
| Астрономия [444] |
| Писатели [113] |
| Классный час [527] |
| Шаблоны документов [85] |
| Другое (Прочее) [412] |

