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

Приклад. Програма ех_2 демонструє механізм роботи процедур New і Dispose, а також Mark і Release

Читайте также:
  1. A.Прикладной уровень
  2. S-M-N-теорема, приклади її використання
  3. Белорусское искусство XVIII века. График Гершка Лейбович, резчик Ян Шмитт, художники Хеские. Слуцкие пояса и другие произведения декоративно-прикладного искусства данной эпохи.
  4. Библиографический список книг В. А. Абчука по экономике, менеджменту, маркетингу и прикладной математике
  5. Билет 34. Прикладная политология. Методы политических исследований.
  6. В якості прикладу розглянемо задачу.
  7. Випишіть та запам'ятайте латинські юридичні терміни, формули, сентенції, наведені в Додатку III ( всі № №, що закінчуються на цифру 1, наприклад: № 1, № 11, № 21 . . . №1141 ).
  8. Випишіть та запам'ятайте латинські юридичні терміни, формули, сентенції, наведені в Додатку III (всі № №, що закінчуються на цифру 0, наприклад: № 10, № 20, № 30 . . . №1140).
  9. Випишіть та запам'ятайте латинські юридичні терміни, формули, сентенції, наведені в Додатку III (всі № №, що закінчуються на цифру 3, наприклад: № 3, № 13, № 23 . . . №1143)
  10. Випишіть та запам'ятайте латинські юридичні терміни, формули, сентенції, наведені в Додатку III (всі № №, що закінчуються на цифру 4, наприклад: № 4, № 14, № 24 . . . №1144).
  11. Випишіть та запам'ятайте латинські юридичні терміни, формули, сентенції, наведені в Додатку III (всі № №, що закінчуються на цифру 5, наприклад: № 5, № 15, № 25 . . . №1145 ).
  12. Випишіть та запам'ятайте латинські юридичні терміни, формули, сентенції, наведені в Додатку III (всі № №, що закінчуються на цифру 7, наприклад: № 7, № 17, № 27 . . . №1147).

Програма ех_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.


1 | 2 | 3 | 4 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)