рефераты
рефераты рефераты
 логин:   
 пароль:  Регистрация 

МЕНЮ
   Архитектура
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Детали машин
Дистанционное образование
Другое
Жилищное право
Журналистика
Компьютерные сети
Конституционное право зарубежныйх стран
Конституционное право России
Краткое содержание произведений
Криминалистика и криминология
Культурология
Литература языковедение
Маркетинг реклама и торговля
Математика
Медицина
Международные отношения и мировая экономика
Менеджмент и трудовые отношения
Музыка
Налоги
Начертательная геометрия
Оккультизм и уфология
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование и комп-ры
Психология - рефераты
Религия - рефераты
Социология - рефераты
Физика - рефераты
Философия - рефераты
Финансы деньги и налоги
Химия
Экология и охрана природы
Экономика и экономическая теория
Экономико-математическое моделирование
Этика и эстетика
Эргономика
Юриспруденция
Языковедение
Литература
Литература зарубежная
Литература русская
Юридпсихология
Историческая личность
Иностранные языки
Эргономика
Языковедение
Реклама
Цифровые устройства
История
Компьютерные науки
Управленческие науки
Психология педагогика
Промышленность производство
Краеведение и этнография
Религия и мифология
Сексология
Информатика программирование
Биология
Физкультура и спорт
Английский язык
Математика
Безопасность жизнедеятельности
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Делопроизводство
Кредитование



Главная > Программирование и комп-ры > Динамические объекты (Турбо Паскаль)

Программирование и комп-ры : Динамические объекты (Турбо Паскаль)

Динамические объекты (Турбо Паскаль)

ДИНАМИЧЕСКИЕ ОБЪЕКТЫ

Объектные переменные в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); {Удаление динамического объекта}

.......

При необходимости деструктор, как и любой другой метод объекта

(кроме конструктора!), можно объявить виртуальным.




Информационная Библиотека
для Вас!



 

 Поиск по порталу:
 

© ИНФОРМАЦИОННАЯ БИБЛИОТЕКА 2010 г.