Основы программирования. Указатели. Динамические структуры данных. Абстрактные типы данных. Классы - 37 стр.

UptoLike

Составители: 

39
Пусть описание класса Stack помещено в модуль IntStack.pas. Далее
приводится код программы, решающей поставленную задачу:
uses IntStack;
var
s1,s2: Stack;
x: integer;
begin
s1:=Stack.Create; // создание и инициализация
s2:=Stack.Create;
while True do // заполнение
begin
read(x)
if x=0 then
break;
if Odd(x) then
s2.Push(x)
else s1.Push(x);
end;
while not s1.IsEmpty do // вывод
write (s1.Pop,' ');
while not s2.IsEmpty do
write (s2.Pop,' ');
writeln;
s1.Destroy; // разрушение
s2.Destroy;
end
.
Переменная Self
Рассмотрим следующий код:
function Stack.IsEmpty: boolean;
begin
Result := head=nil;
end;
Каким образом при вызове метода s1.IsEmpty осуществляется доступ к
полю head именно объекта s1? Ведь нигде в теле метода имя s1 не указано!
Оказывается, в каждый метод неявно первым параметром передается специальная
переменная Self, являющаяся ссылкой на объект класса, вызвавшего данный ме-
тод.
Кроме того, переменная Self неявно добавляется при обращении к полям и
методам данного класса, используемым в теле метода. Таким образом, для компи-
лятора метод IsEmpty имеет вид: