procedure Report; virtual;

      end;

      PCivil = ^TCivil; { указатель на объект «ГРАЖДАНСКИЙ СЛУЖАЩИЙ» }

      TCivil = object (TPerson)

      mLevel : integer;       { должностная категория }

      constructor Init(aBearing: integer; const aName, aFam : string;

      aLevel: integer);

      procedure Report; virtual;

      end;

      {--- Реализация объекта «ВОЕННОСЛУЖАЩИЙ» ---}

constructor TMilitary.Init(aBearing: integer; const aName, aFam,

      aRank : string);

begin

inherited Init(aBearing, aName, aFam);

mRank:= aRank;

end;

procedure TMilitary.Report;

begin

inherited Report;

Writeln('Звание: '+mRank);

end;

      {--- Реализация объекта «ГРАЖДАНСКИЙ СЛУЖАЩИЙ» ---}

constructor TCivil.Init(aBearing: integer; const aName, aFam : string;

      aLevel: integer);

begin

inherited Init(aBearing, aName, aFam);

mLevel:= aLevel;

end;

procedure TCivil.Report;

begin

inherited Report;

Writeln('Категория: ', mLevel);

end;

var Persons : array[1..3] of PPerson; { массив указателей на ПРЕДКА }

i : integer;

begin       {--- Главная программа ---}

{ Массив заполняется объектами РАЗНЫХ, но родственных типов }

Persons[1]:= New(PPerson, Init(1985, 'Иван', 'Семенов'));

Persons[2]:= New(PCivil, Init(1995, 'Мария', 'Рыбкина', 12));

Persons[3]:= New(PMilitary, Init(1985, 'Андрей', 'Быков', 'Майор'));

{ В ходе распечатки вызывается метод ФАКТИЧЕСКОГО объекта }

for i:=1 to 3 do Persons[i]^.Report;

Readln;

Вы читаете Песни о Паскале
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату