Вопрос о наследовании object'ов
 Добавлено: 16.02.2015 17:15:57
Добавлено: 16.02.2015 17:15:57Приветствую.
Чуть кода.
У меня в проекте, есть базовый объект от которого наследуются остальные. Поля next и prev, нужны для реализации универсального списка, для остальных объектов.
Сам список который содержит отнаследованные объекты.
Решил я сделать менеджер ресурсов. И наследовал от TGameObject -> TResource.
От самого, TResource уже наследовать TImage, TAnimation и т.д
Описание менеджера.
Простая хеш-таблица, коллизии разрешаются с помощью цепочек, реализованных на том самом TList.
Смысл TResource в записи Name: STRING; где хранится путь до ресурса.
Явно, что, я что то не понимаю и упустил, но как правильно сделать не знаю.
			Чуть кода.
У меня в проекте, есть базовый объект от которого наследуются остальные. Поля next и prev, нужны для реализации универсального списка, для остальных объектов.
- Код: Выделить всё
- type
 PGameObject = ^TGameObject;
 TGameObject = object
 Next: PGameObject;
 Prev: PGameObject;
 end;
Сам список который содержит отнаследованные объекты.
- Код: Выделить всё
- type
 PList = ^TList;
 TList = object
 Head: PGameObject;
 Tail: PGameObject;
 procedure Create();
 procedure Append(Elem: PGameObject);
 procedure Destroy();
 procedure Remove(Elem: PGameObject);
 end;
Решил я сделать менеджер ресурсов. И наследовал от TGameObject -> TResource.
- Код: Выделить всё
- type
 PResource = ^TResource;
 TResource = object(TGameObject)
 Name: STRING;
 end;
От самого, TResource уже наследовать TImage, TAnimation и т.д
Описание менеджера.
- Код: Выделить всё
- type
 PResourceManager = ^TResourceManager;
 TResourceManager = object
 Table: ARRAY OF TList;
 procedure Init(Size: INTEGER);
 procedure Destroy();
 function Hash(Src: STRING): INTEGER;
 function Find(Src: STRING): PResource;
 end;
Простая хеш-таблица, коллизии разрешаются с помощью цепочек, реализованных на том самом TList.
- Код: Выделить всё
- function TResourceManager.Find(Src: STRING): PResource;
 var
 H: INTEGER;
 I: PResource; // Здесь проблема ругается, что тип не TGameObject. Почему ругается ведь тип после наследования, грубо говоря один.
 begin
 H := Hash(Src);
 I := Table[H].Head;
 
 while (I <> NIL) and (I^.Name <> Src) do
 begin
 I := I^.Next;
 end;
 
 RESULT := I;
 end;
Смысл TResource в записи Name: STRING; где хранится путь до ресурса.
Явно, что, я что то не понимаю и упустил, но как правильно сделать не знаю.