рефераты

Рефераты

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

 
 
 

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


 ДИНАМИЧЕСКИЕ ОБЪЕКТЫ
Объектные
переменные в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);   {Удаление динамического
объекта}
.......
При необходимости деструктор, как и любой другой метод объекта
(кроме конструктора!), можно
объявить виртуальным.

© 2011 Рефераты