Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > объекты и вариантная запись


Автор: zloom 26.12.2010, 16:34
В общем, есть программка для хранения и просмотра объектов 3-х видов. У этих объектов есть 2 общих поля (одно из которых номер под которым объект хранится в массиве) и 2 оригинальных (у каждого вида свои). При реализации этой программки с помощью вариантной записи проблем не возникло при реализации ее с помощью объектов столкнулся с проблемой, где хранить эти объекты возможно ли их хранить в массиве если нет то, как лучше?
и еще вопрос в чем разница между 
Код

room = class
{в описании}

и
Код

room = object
{там же}


Автор: PsiMagistr 26.12.2010, 17:25
Точно не знаю, но по моему использование room = object, устаревшее, пришедшее еще с ТурбоПаскаля.

Автор: zloom 28.12.2010, 11:51
кто нибудь еще может помочь?

Автор: CodeMonkey 28.12.2010, 13:16
object - забудьте. Это старые объекты из TurboPascal-я.

Пример на классах:

Код
type
  TBase = class
  private
    FField1: Integer;
    FField2: String;
  public
    constructor Create(const AField1: Integer; const AField2: String); virtual;
    property Field1: Integer read FField1;
    property Field2: String read FField2;
  end;

  TChild1 = class(TBase)
  private
    FField3: Extended;
    FField4: Boolean;
  public
    constructor Create(const AField1: Integer; const AField2: String; const AField3: Extended; const AField4: Boolean); reintroduce;
    property Field3: Extended read FField3;
    property Field4: Boolean read FField4;
  end;

  TChild2 = class(TBase)
  private
    FField5: Cardinal;
    FField6: Byte;
  public
    constructor Create(const AField1: Integer; const AField2: String; const AField5: Cardinal; const AField6: Byte); reintroduce;
    property Field5: Cardinal read FField5;
    property Field6: Byte read FField6;
  end;

constructor TBase.Create(const AField1: Integer; const AField2: String); 
begin
  inherited Create;

  FField1 := AField1;
  FField2 := AField2;
end;

constructor TChild1.Create(const AField1: Integer; const AField2: String; const AField3: Extended; const AField4: Boolean); 
begin
  inherited Create(AField1, AField2);

  FField3 := AField3;
  FField4 := AField4;
end;

constructor TChild2.Create(const AField1: Integer; const AField2: String; const AField5: Cardinal; const AField6: Byte); 
begin
  inherited Create(AField1, AField2);

  FField5 := AField5;
  FField6 := AField6;
end;

var
  Obj: array of TBase;
begin
  SetLength(Obj, 3);

  Obj[0] := TBase.Create(1, '1');
  Obj[1] := TChild1.Create(2, '2', 3.4, False);
  Obj[2] := TChild2.Create(3, '3', 9, 0);

  Tag := Obj[0].Field1 + Obj[1].Field1 + Obj[3].Field1;

  if Obj[0] is TChild2 then
    Tag := Tag + TChild2(Obj[0]).Field5;
  if Obj[1] is TChild2 then
    Tag := Tag + TChild2(Obj[1]).Field5;
  if Obj[2] is TChild2 then
    Tag := Tag + TChild2(Obj[2]).Field5;

  FreeAndNil(Obj[2]);
  FreeAndNil(Obj[1]);
  FreeAndNil(Obj[0]);
end;


(писал на коленке, могут быть опечатки)

Автор: zloom 28.12.2010, 21:40
большое спс за помощь осталось только самому разобраться=) с наступающим!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)