P.41.3 Ответы
Определить, что будет в переменной Man после выполнения следующей программы.
Program AA;
type
Obj1 = object
constructor Init;
function C1(x : integer) : integer; virtual;
function C2(x : integer) : integer; virtual;
destructor Done;
end;
PObj1 = ^Obj1;
Obj2 = object(Obj1)
constructor Init;
function C1(x : integer) : integer; virtual;
end;
PObj2 = ^Obj2;
PList = ^List;
List = record
AA : PObj1;
Pred, Nex : PList;
end;
constructor Obj1.Init; begin end;
function Obj1.C1(x : integer) : integer; begin C1:=x+5; end;
function Obj1.C2(x : integer) : integer;
begin C2:=C1(x)*C1(x); end;
destructor Obj1.Done; begin end;
constructor Obj2.Init; begin Obj1.Init; end;
function Obj2.C1(x : integer) : integer; begin C1:=x*2; end;
var
Q, Last, PP : PList;
Man, i : integer;
begin
New(PP); PP^.Pred:=nil; PP^.Nex:=nil;
PP^.AA:=New(PObj1,Init); Last:=PP;
for i:=2 to 10 do
if i mod 2 =1 then begin
New(Q); Q^.Nex:=nil;
Q^.Pred:=Last; Last^.Nex:=Q;
Q^.AA:=New(PObj1,Init);
Last:=Q;
end
else begin
New(Q); Q^.Nex:=nil;
Q^.Pred:=Last; Last^.Nex:=Q;
Q^.AA:=New(PObj2,Init);
Last:=Q;
end;
Man:=0;
while PP<>nil do begin
Man:=Man+PP^.AA^.C2(2);
Dispose(PP^.AA,Done);
Q:=PP;
PP:=PP^.Nex;
Dispose(Q);
end;
end.