program polivir;
uses Crt;
const
LENLIST=10; { длина списка }
type
TPerson = object
FName: string[30]; { имя }
FAddress: string[40]; { адрес }
constructor init(Name,Address:string); { конструктор объекта }
destructor Done; virtual; { деструктор объекта }
procedure print; virtual;
end;
TStudent = object(TPerson)
FGroup: integer; { учебная группа }
constructor init(Name,Address:string;Group:integer);
destructor Done; virtual;
procedure print; virtual;
end;
TProf = object(TPerson)
FKafedra: string[30]; { кафедра }
constructor init(Name,Address,Kafedra:string);
destructor Done; virtual;
procedure print; virtual;
end;
PStudent=^TStudent;
PProf=^TProf;
constructor TPerson.init(Name,Address:string);
begin
FName:=Name;
FAddress:=Address;
end;
destructor TPerson.Done;
begin
end;
procedure TPerson.print;
begin
writeln(FName);
writeln(FAddress);
end;
constructor TStudent.init(Name,Address:string;Group:integer);
begin
TPerson.init(Name,Address);
FGroup:=Group;
end;
destructor TStudent.Done;
begin
inherited Done; { вызов деструктора родительского типа }
end;
procedure TStudent.print;
begin
TPerson.print;
writeln('гр. ',FGroup);
end;
constructor TProf.init(Name,Address,Kafedra:string);
begin
TPerson.init(Name,Address);
FKafedra:=Kafedra;
end;
destructor TProf.Done;
begin
inherited Done;
end;
procedure TProf.print;
begin
TPerson.print;
writeln('каф. ',FKafedra);
end;
var
list: array[1..LENLIST] of ^TPerson;
i:integer;
begin
{ инициализация списка }
for i:=1 to LENLIST do
list[1]:=NIL;
{ создать три объекта и поместить в список }
list[1]:=new(PStudent,init('Михаил Иванов','Лесной пр, д.29, корп.6ф, комн.211',3813));
list[2]:=new(PStudent,init('Цветков Станислав','пр. К.Маркса, д.32, кв.3',3813));
list[3]:=new(PProf,init('Некрасов Степан Петрович','Институтский пр., д.7, кв.13','Управление проектами'));
{ вывести объекты - элементы списка }
for i:=1 to LENLIST do
if list[i] <> NIL
then list[i]^.print;
{ уничтожить объекты }
for i:=1 to LENLIST do
if list[i] <> NIL
then
begin
Dispose(list[i],Done);
list[i]:=NIL;
end;
Readln;
end.