Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уст.лекции_ООП.doc
Скачиваний:
14
Добавлен:
22.09.2019
Размер:
359.42 Кб
Скачать

6.1 Пример описания виртуального метода

Заголовки всех реализаций одного и того же виртуального метода должны быть идентичными, включая число параметров и их типы.

Пример описания типа, в котором объявлен виртуальный метод:

type

TPerson=class

fname:string;{ имя }

constructor Create (name:string) ;

function info: string; virtual;

end;

TStud=class(TPerson)

fgr:integer; { номер группы}

constructor Create(name:string;gr:integer);

function info:string; override;

end;

В каждом из этих классов определен метод info. В базовом классе при по­мощи директивы virtual метод info объявлен виртуальным. Объявление метода виртуальным дает возможность дочернему классу произвести замену виртуального метода своим собственным. В каждом дочернем классе опре­делен свой метод info, который замещает соответствующий метод родитель­ского класса (метод порожденного класса, замещающий виртуальный метод родительского класса, помечается директивой override).

7 Вопрос

Динамическая память. Выделение и освобождение памяти для динамической переменной, используя операции new и dispose соответственно. Привести пример динамического распределения памяти.

Память для хранения данных может выделяться как статически, так и динамически. В первом случае выделение памяти выполняет компилятор, встретивший при компиляции объявление объекта. В соответствии с типом встретившегося объекта вычисляется объем памяти, требуемый для его размещения. Класс памяти задает место, где эти объекты (данные) будут располагаться. Это может быть сегмент данных либо стек.

Часто возникают ситуации, когда заранее не известно, сколько объектов – чисел, строк текста и прочих данных будет хранить программа. В этом случае используется динамическое выделение памяти, когда память занимается и освобождается в процессе исполнения программы. При использовании динамической памяти (ДП) отпадает необходимость заранее распределять память для хранения данных, используемых программой. Управление динамической памятью – это способность определять размер объекта и выделять для его хранения соответствующую область памяти в процессе исполнения программы.

Выделение памяти для динамической переменной осуществляется вызовом процедуры new. У процедуры new один параметр — указатель на переменную того типа, память для которой надо выделить. Например, если р является указателем на тип real, то в результате выполнения процедуры new(p); будет выделена память для переменной типа real (создана переменная типа real), и переменная-указатель р будет содержать адрес памяти, выделенной для этой переменной.

У динамической переменной нет имени, поэтому обратиться к ней можно только при помощи указателя.

Процедура, использующая динамические переменные, перед завершением своей работы должна освободить занимаемую этими переменными память или, как говорят программисты, уничтожить динамические переменные". Для освобождения памяти, занимаемой динамической переменной, используется процедура Dispose, которая имеет один параметр — указатель на динамическую переменную.

Например, если р — указатель на динамическую переменную, память для которой выделена инструкцией new(p), то инструкция dispose (р) освобождает занимаемую динамической переменной память.