Автор: iriska_2 19.05.2007 20:18
у меня проблема никак не могу написать копирующий конструктор для списка списков
Код
type
ListItem=record
nomer,vilet1,vilet2,prilet2,prilet1:integer;
mesto,pyt:string[20];
end;
pListItem2=^ListItem2;
listItem2=record
n:plistItem2;
l:tpassajir;
info:listItem;
end;
inform=record
I,O,F,GR:string[20];
end;
paslist=^tpaslist;
TpasList=record
g_inform:inform;
next:pasList;
table=class
private
pstart:pListItem2;
colvo:word;
head:pasList;
fCount:word;
public
constructor creat(Mytb:table{;var mytb2:Table});overload;
помогите, пожалуйста
Автор: iriska_2 19.05.2007 20:30
пыталась написать, но ничего не работает
Код
constructor table.creat(mytb:table);
var tmp, tmp1,tmp2,pstart2:pListItem2; b,m,il:integer; iy:inform;
begin
pStart2:=nil;
colvo:=mytb.colvo;
tmp:=mytb.pstart;
// b:=colvo;
tmp1:=pstart2;
m:=0;
for b:=0 to colvo-1 do begin
new(tmp1);
tmp1^.n:=pstart2;
pstart2:=tmp1;
tmp:=mytb.get(b+1);
tmp1^.info.nomer:=tmp^.info.nomer;
tmp1^.info.vilet1:=tmp^.info.vilet1;
tmp1^.info.vilet2:=tmp^.info.vilet2;
tmp1^.info.prilet2:=tmp^.info.prilet2;
tmp1^.info.prilet1:=tmp^.info.prilet1;
tmp1^.info.mesto:=tmp^.info.mesto;
tmp1^.info.pyt:=tmp^.info.pyt;
for m:=0 to tmp^.l.GetLen-1 do begin
iy:=tmp^.l.getrec(m);
tmp1^.l:=tpassajir.create;
tmp1^.l.add(iy.i,iy.O,iy.f,iy.gr);
end;
tmp:=tmp^.n;
end;
pstart:=pstart2;
end;
Автор: мисс_граффити 19.05.2007 22:09
Можно чуть подробнее, что ты пытаешься сделать?
Что такое копирующий конструктор?
То есть ты ему передаешь объект класса table, а он создает второй такой же?
Автор: Гость 19.05.2007 22:27
когда я вызываю конструкто, который написала, получается, что у обоих классов один начальный
Автор: volvo 19.05.2007 22:28
Я вот тут показывал, что надо делать:
http://forum.pascal.net.ru/index.php?showtopic=4692
Кстати, приведи свой конструктор (не копирующий, а просто конструктор класса), чтобы можно было проверить работоспособность решения...
Автор: Гость 19.05.2007 22:29
когда я вызываю конструктор, который написала, получается, что у обоих классов одна ссылка на начало и когда преобразования делаю в одном классе преобразуется и второй
Автор: Гость 19.05.2007 22:31
обыкновенный конструктор:
Код
constructor table.create;
begin
colvo:=0;
pstart:=nil;
end;
Автор: volvo 19.05.2007 22:33
Тогда покажи код создания списка... Почему нам надо все время делать уже сделанное, если ты можешь присоединить это сразу? Весь файл присоединить нельзя?
Автор: Гость 19.05.2007 22:51
Код
procedure table.table_addreis(rreis:integer);
var q:LIstItem; v1,v2,p1,p2,b,p:integer;r:pListItem2;t:byte;
begin
t:=0;
p:=0;
b:=colvo;
while b<>0 do begin
b:=b-1;
q:=mytb.getrec(p);
P:=p+1;
R:=mytb.get(p);
if q.nomer=rreis then begin
FORM6.SHOWMODAL;
r^.l.tpassajir_add;
form6.editF.text:='';
form6.editI.text:='';
form6.editO.text:='';
form6.editGR.text:='';
t:=t+1;
end
else begin
r:=r^.n;
end;
end;
form5.edreis.text:='';
if t<>1 then begin
new(r);
r^.n:=pstart;
pstart:=r;
r^.info.nomer:=rreis;
colvo:=colvo+1;
form3.showmodal;
r^.info.vilet1:=strtoint(form3.eviletchas.text);
r^.info.vilet2:=strtoint(form3.eviletmin.text);
r^.info.prilet1:=strtoint(form3.epriletchas.text);
r^.info.prilet2:=strtoint(form3.epriletmin.text);
v1:=r^.info.vilet1;
v2:=r^.info.vilet2;
p1:=r^.info.prilet1;
p2:=r^.info.prilet2;
r^.info.pyt:=mytb.vrimia(v1,v2,p1,p2);
r^.info.mesto:=form3.emesto.text;
form3.eviletchas.text:='';
form3.eviletmin.text:='';
form3.epriletchas.text:='';
form3.epriletmin.text:='';
form3.emesto.text:='';
form6.showmodal;
R^.l:=tpassajir.create;
r^.l.tpassajir_add;
form6.editF.text:='';
form6.editI.text:='';
form6.editO.text:='';
form6.editGR.text:='';
end;
end;
procedure tpassajir.tpassajir_add;
var u:paslist;
begin
new(u);
u^.next:=head;
head:=u;
u^.g_inform.I:=form6.editI.text;
u^.g_inform.O:=form6.editO.text;
u^.g_inform.F:=form6.editF.text;
u^.g_inform.gr:=form6.editGR.text;
fcount:=fcount+1;
end;