Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.23;
Скачать: CL | DM;

Вниз

вопрос про динамику   Найти похожие ветки 

 
step1k ©   (2005-10-03 00:43) [0]

Люди, подскажите как лучше осуществить.
Есть Запись, в которой хранятся параметры каждого объекта:
MyObject = record
 height, length, plotnost : double
 ...
 и т.д.
 ...
 end;
Но таких объектов у меня до фига.

Применять метод
VseObjects = array of MyObject;
непозволительно (т.к. записи формируются в стеке, а если записей тысяча) (кстати, число записей изменяется динамически, в каждой задаче оно свое).
Нельзя ли MyObject сделать, что-ли, в форме указателя? Что подскажете сделать и по возможности пожалуйста приведите примеры.


 
Eleepod   (2005-10-03 00:57) [1]

Здесь, наверное, лучше использовать динамические списки.

Type  U = ^Zveno;
Zveno = Record
             Inf : BT;
             Next: U End;

Основные моменты:

1. Добавление звена в начало списка

       {Процедура добавления звена в начало списка; в x содержится добавляемая информация}
      Procedure V_Nachalo(Var First : U; X : BT);
      Var Vsp : U;
      Begin
              New(Vsp);
              Vsp^.Inf := X;
              Vsp^.Next := First; {То звено, что было заглавным, становится вторым по счёту}
              First := Vsp; {Новое звено становится заглавным}
      End;



2. Удаление звена из начала списка

       {Процедура удаления звена из начала списка;
       в x содержится информация из удалённого звена}
      Procedure Iz_Nachala(Var First : U; Var X : BT);
      Var Vsp : U;
      Begin
              Vsp := First; {Забираем ссылку на текущее заглавное звено}
              First := First^.Next; {То звено, что было вторым по счёту, становится заглавным}
              X := Vsp^.Inf; {Забираем информацию из удаляемого звена}
              Dispose(Vsp); {Уничтожаем звено}
      End;



3. Добавление звена в произвольное место списка, отличное от начала (после звена, указатель на которое задан)

       {Процедура добавления звена в список после звена,
       на которое ссылается указатель Pred;
       в x содержится информация для добавления}
      Procedure V_Spisok(Pred : U; X : BT);
      Var Vsp : U;

      Begin
          New(Vsp); {Создаем пустое звено}
          Vsp^.Inf := X; {Заносим информацию}
          Vsp^.Next := Pred^.Next; {Теперь это звено ссылается на то,
                                    что было следом за звеном Pred}
          Pred^.Next := Vsp; {Теперь новое звено встало вслед за звеном Pred}
      End;



4. Удаление звена из произвольного места списка, отличного от начала (после звена, указатель на которое задан)

       {Процедура удаления звена из списка после звена,
       на которое ссылается указатель Pred;
       в x содержится информация из удалённого звена}
      Procedure Iz_Spiska(Pred : U; Var X : BT);
      Var Vsp : U;
      Begin
           Vsp := Pred^.Next; {Забираем ссылку на удаляемое звено}
           {Удаляем звено из списка, перенаправив ссылку на следующее
            за ним звено}
           Pred^.Next := Pred^.Next^.Next;
           X := Vsp^.Inf; {Забираем информацию из удаляемого звена}
           Dispose(Vsp);  {Уничтожаем звено}
      End;

Ну а дальше сам. :)


 
Defunct ©   (2005-10-03 01:23) [2]

step1k ©   (03.10.05 00:43)

Я бы вместо MyObject = record, применил бы

TMyClass = class
...
end;

при создании экземпляра сразу будет ссылка, и можно нормально использовать конструкцию array of TMyClass, а можно воспользоваться уже готовыми списком TObjectList (uses Contnrs).


 
Германн ©   (2005-10-03 01:34) [3]

Задачу - не понял.

Defunct ©   (03.10.05 01:23) [2] предложил вариант, который я обычно использую, но предпочитаю
 TMyClass = class(TObject)


 
Джо ©   (2005-10-03 01:36) [4]


>  [3] Германн ©   (03.10.05 01:34)

TMyClass = class(TObject)
TMyClass = class
И какая разница?


 
Adder ©   (2005-10-03 01:40) [5]


> Германн ©   (03.10.05 01:34) [3]

А в чем разница, кроме эстетики? -)

If the declaration of a class type doesn’t specify an ancestor, the class inherits directly from TObject.

type TMyClass = class
...
end;

is equivalent to

type TMyClass = class(TObject)
...
end;


 
Германн ©   (2005-10-03 01:51) [6]

2 Adder ©   (03.10.05 01:40) [5]
Нахожусь в процессе Upgrade My Systems :(
D4 пока мне не доступно. И в Д4 так?


 
Джо ©   (2005-10-03 02:01) [7]


> [6] Германн ©   (03.10.05 01:51)
> И в Д4 так?

А есть другие кандидаты на корневой объект? ;)


 
Defunct ©   (2005-10-03 02:07) [8]

Германн ©   (03.10.05 01:51) [6]

А проверить?

TMyClass = class
end;

if TMyClass.Create is TObject then
  ShowMessage( "Ку")


 
Германн ©   (2005-10-03 02:10) [9]

2 Джо ©   (03.10.05 02:01) [7]
Есть. Но не сегодня!

2 Adder ©   (03.10.05 01:40) [5]
Да и в Д4 справка даёт тот же результат :(

Но где-то, когда-то эти объявления отличались! ИМХО!


 
Джо ©   (2005-10-03 02:16) [10]


>  [9] Германн ©   (03.10.05 02:10)

Возможно, твои подозрения были навеяны  вот этим
TMyObject = object
end;

Это объявление до сих пор можно применять в Делфи и предком TMyObject в данном случае НЕ будет TObject.


 
Джо ©   (2005-10-03 02:18) [11]

И, так как классом это не является, к его екземплярам оператор is вообще не приложим. Вот такой вот объект без предка :)


 
Adder ©   (2005-10-03 02:26) [12]


> Германн ©   (03.10.05 02:10) [9]

И в D3,D5, и D6 - тоже так -)
Где-то, когда-то и слова class в Pascal не было (BP7) %)


 
begin...end ©   (2005-10-03 08:40) [13]

> Defunct ©   (03.10.05 01:23) [2]

Использовать экземпляр класса только для хранения данных нерационально. Это влечёт за собой замедление производительности. И, главное, вообще противоречит назначению классов.


 
Defunct ©   (2005-10-03 09:57) [14]

begin...end ©   (03.10.05 08:40) [13]

Не факт, что потребуется только хранение данных, а в остальном согласен.



Страницы: 1 вся ветка

Текущий архив: 2005.10.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.043 c
14-1128118890
Chuvak
2005-10-01 02:21
2005.10.23
spool.exe в папке Windows


1-1128327553
Batiskaf
2005-10-03 12:19
2005.10.23
Автоматический конвертор из .pas => .hpp


14-1127987466
LamerLama
2005-09-29 13:51
2005.10.23
USB-host controller (???)


2-1127915344
Igor_thief
2005-09-28 17:49
2005.10.23
Tnotebook


6-1120691505
kami
2005-07-07 03:11
2005.10.23
Обновить список клиентов при ServerSocket.OnDisconnect