Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2017, 11:40   #1
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию Записи или классы?

Здравствуйте!
Есть первый тип Т1
Код:
T1 = record
  ...
end;
Есть массив из Т1
Код:
arT1: array of T1;
Есть Т2, одно из полей которого = массив из элементов массива T1
Код:
T2 = record
  ...
  sub_arT1: array of T1; // каждый элемент массива равен одному из элементов arT1
end;
И есть, соответственно, массив Т2
Код:
arT2: array of T2;
Как удобнее реализовать?
Я пока реализую так: делаю не массив из элементов Т1, а из индексов массива arТ1.
Код:
T2 = record
  ...
  sub_arT1: integer; // каждой цифре соответствует номер индекса массива arT1
end;
Но мне кажется, что можно как-то проще, удобнее и нагляднее. Может, через классы? У меня пока не получается до конца разобраться в них. Нужен ли тогда массив?
И правильно ли понимаю, что если, допустим я напишу:
Код:
sub_arT1[2] := arT1[7];
arT1[7].N := 7;
то не станет у меня sub_arT1[2].N = 7? Не изменится автоматически, т.к. это не указатель, а сам объект?

Последний раз редактировалось Ship_1; 20.01.2017 в 12:19.
Ship_1 вне форума Ответить с цитированием
Старый 20.01.2017, 12:02   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Есть первый тип: Т1 = запись
Есть массив из Т1: arT1
Надо либо не писать кода (запись массив элемент) вообще. Использовать постановку задачи без привязки к языку.
либо писать ПРИМЕР КОДА на выбранном языке.
Код:
T1=record end;
T2 =array of T1;
А вручную переводить обратно на понятный язык, увольте.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 20.01.2017, 12:07   #3
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Хорошо, поправил

Последний раз редактировалось Ship_1; 20.01.2017 в 12:15.
Ship_1 вне форума Ответить с цитированием
Старый 20.01.2017, 13:22   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Лучше массивы чем классы =)
а вот так sub_arT1[2] := arT1[7]; нужно делать с умом,
если будет вот такой тип
Код:
T1 = record
  xxx : string; // <<<
  ...
end;
по после этого >>> sub_arT1[2] := arT1[7] << могут быть утечки памяти
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 20.01.2017, 13:33   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Не изменится автоматически
Изменится, у тебя динамические массивы, они по ссылке. Так что ни каких массивов индексов не нужно, а смело сам массив. Насчет что лучше - с классами код обычно понятней, имхо
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.01.2017 в 13:50.
Аватар вне форума Ответить с цитированием
Старый 20.01.2017, 13:52   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Код:
T2 = record
  ...
  sub_arT1: array of T1; // каждый элемент массива равен одному из элементов arT1
end;

T2 = record
  ...
  sub_arT1: integer; // каждой цифре соответствует номер индекса массива arT1
end;
это ДВА абсолютно разных описания.
И какое вам нужно (реализует вашу задачу)?
Цитата:
Как удобнее реализовать?
А что реализовать то? Где ИСХОДНАЯ задача, есть только попытка реализации (и даже ДВЕ реализации) чего-то неизвестного. Опять восстанавливать исходную задачу, да еще с вероятностью что было реализовано нечто другое.

Класс с точки зрения ХРАНЕНИЯ данных по большому счету это ТА ЖЕ запись. ВСЕ данные хранятся в тех же "именованных" полях.
А с точки зрения доступа класс всегда есть ссылка на запись.

И если присвоение записи (rec2:=rec1;) выполняет КОПИРОВАНИЕ.
имеем ДВА абсолютно независимых ОБЪЕКТА.
и последующие изменения одного из них НЕ приводят к изменениям другого. ЕСЛИ ...
при начальном копировании НЕ БЫЛА скопирована ссылка.
в частности динамический массив (xx: array of T1;) выступающий в качестве элемента записи в одном ИЗ вариантов и есть ТАКАЯ ссылка.
В этом случае идет простое копирование ссылки(указателя) к тому же самому объекту.
будет один массив на несколько разных записей.

То присвоение класса (c2:=c1; )оставляет ТОТ ЖЕ класс.
имеем ДВЕ ССЫЛКИ (два пути) к ОДНОМУ ОБЪЕКТУ (одной и той же записи)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.01.2017 в 14:00.
evg_m на форуме Ответить с цитированием
Старый 20.01.2017, 14:08   #7
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Аватар, Спасибо! Чётко и понятно
evg_m. Есть помещения (arT1). В помещениях есть системы (arT2). Каждая система со своими характеристиками, одинаковых в конечном итоге нет. Как и помещений. В каждом помещении есть по несколько систем (sub_arT1). Вот вкратце задача. У систем должна быть возможность изменения параметров в независимости от помещений. Поэтому как внутренний параметр помещения они не подходят. Но раз динамический массив - это указатели (как коротко и ясно сказал Аватар), то ссылки на его части позволяют работать с системами независимо от помещений, и при изменении системы у системы внутри помещения видим те же изменения. Т.е., в принципе, можно обойтись и записями с динамическими массивами внутри, ссылающимися на другие динамические массивы. Но, т.к., например, в комнату нужно добавлять запись, удалять запись, наверное, удобнее было бы этот процесс изолировать от общего кода. Поэтому я и подумал про классы.

Последний раз редактировалось Ship_1; 20.01.2017 в 14:59.
Ship_1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
hcard, эти классы используются в css или запрещены Stewarts HTML и CSS 1 12.08.2015 21:36
добавление записи через Edit или DBEdit. IgoreKMaN БД в Delphi 5 02.05.2012 22:58
Добавление записи через DBGrid или Edit. IgoreKMaN БД в Delphi 1 01.05.2012 11:24
Попытка чтения или записи в защищенную память. zzz6 Общие вопросы C/C++ 2 23.03.2012 20:26
Ошибка при создании и (или) записи таблицы ProgDel БД в Delphi 5 07.11.2010 20:00