Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заставить конструктор возвращать другое значение, или подскажите книгу... 
:(
    Опции темы
saneea
Дата 5.4.2008, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



Собственно разрабатываеться модель файловой системы (курсовой проект). Смысл вот в чём: существует к примеру массив целых чисел (хенделов на файлы). На каждый хендл может быть создан экземпляр класса, а может быть не создан (это меняется динамически в ходе работы программы). Я хочу сделать так, чтобы при создании объекта с повторном хенделом, получалась ссылка на уже существующий объект...
Вобщем что-то вроде этого:
Код

a:=FileRec.Create(2);//создаём объект a с хенделом 2
b:=FileRec.Create(2);//снова создаём объект a с хенделом 2

и нужно что-бы после этого ссылки a и b указывали на один и тот же экземпляр... Такое возможно?

И ещё одна просьба, подскажите в каких книгах можно прочитать о работе с классами в ObjectPascal.
PM MAIL   Вверх
MetalFan
Дата 6.4.2008, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Синглтон чтоли хочешь реализовать?
поищи по слову Singleton.
варианты реализации:
1. Простой. Доступ к единственному объекту через функцию, в которой он создается один раз и храниться в глобальной переменной.
2. Чуть более сложный. Перекрыть метод NewInstance в котором всегда возвращать ссылку на единожды созданный экземпляр класса.

Добавлено через 1 минуту и 17 секунд
ну да, применительно к сабжу задача немного усложняется. придется видимо вести список соответствия хэндл-объект...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
saneea
Дата 7.4.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



Решил задачу таким образом: описываю класс TFileRecord и в его теле кроме прочих элементов добавляю переменную NextFile: TFileRecord(получается связаный список). И после этого пишу такую функцию, которая ищет в этом списке экземпляр с таким же хендлом. Если находим такой экземпляр, то возвращаем ссылку на него, а если не находим, то добавляем в список ещё один элемент. Всё отлично работает:

функция Assign:
Код

procedure TFileSystem.Assign(h: byte; var fl: TFileRecord);
var
FileRecord, buf: TFileRecord;
found: boolean;
block: TBlock;
begin
found:=false;
FileRecord:=AssignList;
while FileRecord<>nil do
  begin
  if FileRecord.name=HandleToName(h) then
    begin
    fl:=FileRecord;
    found:=true;
    break;
    end;
  FileRecord:=FileRecord.NextFile;
  end;

if not(found) then
  begin
  ReadBlock(h, block);
  FileRecord:=TFileRecord.Create(block, h);
  //FileRecord.handle:=h;
  fl:=FileRecord;
  buf:=AssignList;
  if AssignList=nil then
    AssignList:=FileRecord
  else
    while true do
      if buf.NextFile=nil then
        buf.NextFile:=FileRecord
      else
        buf:=buf.NextFile;
  end;
end;


P.S.: Подскажите пожалста книгу где можно почитать о работе с классами.
PM MAIL   Вверх
MetalFan
Дата 7.4.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



хорошая книга по ООП - Приемы объектно-ориентированного проектирования. там правда на C++ но все достаточно понятно


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0741 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.