|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Приклад. Програма ех_2 демонструє механізм роботи процедур New і Dispose, а також Mark і ReleaseПрограма ех_2 демонструє механізм роботи процедур New і Dispose, а також Mark і Release. Стан динамічної пам'яті під час роботи програми показано на рисунку. program ex_2; var ptr,p1,р2,р3,р4:^іnteger; begin New(p1); {виділити пам'ять для цілого числа } Mark(ptr); {запам'ятати адресу початку вільної області} New(p2); {виділити пам'ять ще для трьох цілих чисел } New(p3); New(p4); Dispose(p3); {звільнити пам'ять від рЗ^ } Release(ptr); {звільнити пам'ять від р2^,рЗ^, р4^ } { Dispose(p4); {помилка: змінну р4^ вже видалено!!! } readln; end.
Приклад програми з динамічним об'єктом з віртуальними методами і з використанням деструкції Лістинг 2. Динамічні об'єкти з віртуальним методом. Program Dvirt; {$F+,R+} Uses Crt; Type Objname1 = object { - тип об'єкту-предка } Fl1: integer; Constructor Met1; {- конструктор типу Objname1 } Destructor Done; Virtual; {- деструкція типу Objname1 } Procedure Met2; Virtual; End; Objname2=object (Objname1) {- тип нащадка Objname1) Procedure Met2; Virtual; Destructor Done; Virtual; {- деструктор типу Objname2 } End; Pobjname1 = ^ObjName1; {- тип - покажчик на об'єкт Objname1} Pobjname2 = ^ObjName2; { -" " " Objname2 } {---------------------------- Методи об'єкту Objname1---------------------------------------} Constructor Objname1.Met1; Begin Met2; {- виклик Met2 з конструктора } End; Destructor Objname1.Done; Begin Writeln ('Звільняється ОП об'єкту типу Objname1'); End; Procedure Objnamel.Met2; Begin Fl1:= 12; Writeln ('Працює метод Objname1.Met2: Fl1= ', Fl1) End; { Методи об'єкту Objname2 } Procedure Objname2.Met2; Begin Fl1:= 34; Writeln ('Працює метод Objname2.Met2: Fl1 = ', Fl1) End; Destructor Objname2.Done; Begin Writeln ('Звільняється ОП об'єкту типу Objname2'); End; Var V1: Pobjname1; { - динамічний об'єкт V1 } V2: Pobjname2; { - " " V2 } { Основна програма Begin Clrscr; Assign (Output, 'Dvirt.res'); Rewrite (output); Writeln ('ДИНАМІЧНІ ОБ'ЄКТИ, ВІРТУАЛЬНІ МЕТОДИ'); Writeln ('Працюємо з V1 - екземпляром типу предка'); { Викликається конструктор Met1 для екземпляра V1 - предка:} New (V1,met1); {- створення динамічного об'єкту V1 } V1^.Met2; {- виклик методу Objname1.Met2; } { Видалення об'єкту - тільки за допомогою Dispose і Done: } Dispose (V1,done); {- видалення об'єкту V1 деструкцією Objname1.Done } Writeln ('Працюємо з V2- екземпляром типу нащадка'); { Викликається конструктор Met1 для екземпляра V2 - нащадка V1:} New (V2, Met1); { - створення динамічного об'єкту V2 } V2^.Met2; {- виклик методу Objname2.Met2; } { Видалення об'єкту - тільки за допомогою Dispose і Done: } Dispose (V2,done); { - видалення об'єкту V2 деструкцією Objname2.Done} Close (Output); End. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |