Помощь - Поиск - Пользователи - Календарь
Полная версия: копирующий конструктор
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
iriska_2
у меня проблема никак не могу написать копирующий конструктор для списка списков
Код
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
пыталась написать, но ничего не работает
Код
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;

мисс_граффити
Можно чуть подробнее, что ты пытаешься сделать?
Что такое копирующий конструктор?
То есть ты ему передаешь объект класса table, а он создает второй такой же?
Гость
да,совершенно верно
Гость
когда я вызываю конструкто, который написала, получается, что у обоих классов один начальный
volvo
Я вот тут показывал, что надо делать:
Копирующий конструктор

Кстати, приведи свой конструктор (не копирующий, а просто конструктор класса), чтобы можно было проверить работоспособность решения...
Гость
когда я вызываю конструктор, который написала, получается, что у обоих классов одна ссылка на начало и когда преобразования делаю в одном классе преобразуется и второй
Гость
обыкновенный конструктор:
Код

constructor table.create;
begin
  colvo:=0;
  pstart:=nil;
end;
volvo
Тогда покажи код создания списка... Почему нам надо все время делать уже сделанное, если ты можешь присоединить это сразу? Весь файл присоединить нельзя?
Гость
Код

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;


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.