Категория
Информатика
Тип
реферат
Страницы
3 стр.
Дата
17.03.2013
Формат файла
.html — Html-документ
Архив
218019.zip — 2.57 kb
  • dinamicheskie-obekty-turbo-paskal_218019_1.html — 6.24 Kb
  • Readme_docus.me.txt — 125 Bytes
Оцените работу
Хорошо  или  Плохо


Текст работы

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

Объектные переменные в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.



Ваше мнение



CAPTCHA