![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
JUDAS, к сожалению, недостаточная степень просветления в вопросах программирования не позволяет мне оценить весь масштаб обвалившегося на меня счастья, которое должно было последовать за вашим последним замечанием...
В приведённых процедурах/функциях вроде как разобрался, единственное, не совсем понимаю как весь этот аппарат прикрутить к record'у дабы организовать перегрузку, или это тоже делается в обход? Последний раз редактировалось Rhasta-Rhasta; 20.09.2015 в 15:35. |
![]() |
![]() |
![]() |
#12 |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
![]()
просто замени record на class и добавь constructor и destructor.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. ![]() |
![]() |
![]() |
![]() |
#13 |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
Разобрался с основой, буду адаптировать под свои нужды. Большое спасибо!
|
![]() |
![]() |
![]() |
#14 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Э, кхм, нашли кого слушать.
Перегрузка операторов действительно доступна только для рекордов, но там где она доступна, доступны и методы рекордов, что для данной задачи практически покрывает потребности в работе с такими типами, ведь не требуется наследование и полиморфизм, хотя инкапсуляция с сокрытием доступа была бы кстати (это 3 кита ООП и реализации классов). Собственно, перегрузки базовых операторов должно быть достаточно - арифметических, сравнения, присвоения (с неявным и с явным приведением). Что до перегрузки, как Вы выражаетесь, базовых операций RTL типа SetLength, то тут достаточно инкапсуляции - например, в конструкторе задать размерность массива или иные необходимые действия, или в методе в каком, особый синтаксис (конструктор без параметров) позволяет инициализировать запись по умолчанию как хотите, для этого ничего делать не надо, всё работает просто при объявлении переменной. Также доступны итераторы - возможность описания поведения типа при использовании его с инструкцией for x in y - в стандартной справке, и в дельфи-блогах етсь обзорная информация, остальное пробуйте, так лучше закрепится ![]() Насчёт 4 пункта - читайте про дженерики www.keeper89.blogspot.com/2011/07/delphi.html Последний раз редактировалось phomm; 21.09.2015 в 16:48. |
![]() |
![]() |
![]() |
#15 |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
phomm, мир никогда не будет таким, как прежде. Буду пробовать.
Статья про дженерики великолепна. |
![]() |
![]() |
![]() |
#16 |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
Подскажите, пожалуйста, почему возникает ошибка
Код:
|
![]() |
![]() |
![]() |
#17 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Текст ошибки угадывать?
I'm learning to live...
|
![]() |
![]() |
![]() |
#18 |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
Написано же в комментарии. Надо было мне поярче выделить ...
setSize(Matrix[k],j); // There is no overloaded version of 'setSize' that can be called with these arguments (E2250) ошибка при трансляции Последний раз редактировалось Rhasta-Rhasta; 23.09.2015 в 20:09. |
![]() |
![]() |
![]() |
#19 |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
Если я правильно понял, свойство Matrix[k] в данном случае подразумевает лишь чтение вектора, а процедура SetSize предполагает его изменение, и это противоречие приводит к такой ошибке. Верно же? Возможно ли это как-то обойти так, чтобы список параметров и способ их записи для процедуры setSize был идентичен процедуре system.setlength?
Последний раз редактировалось Rhasta-Rhasta; 25.09.2015 в 10:23. |
![]() |
![]() |
![]() |
#20 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Проперти "массивового" действия (или называют ещё индексаторы) действуют с ограничениями - они являются скорее неявными обращениями к соответствующим аксессорам, нежели обращение к соответствующим данным в требующемся Вам виде.
Поэтому недоступна семантика таких вызовов как у Вас, равно как и для всех пропертей недоступна семантика передачи как var-параметра, и всех подобных операций (детали: Properties, абзац перед разделом Property Access) Для Вашей задачи можно (и даже нужно, из соображения композиции данных и кода в типе и формальной инкапсуляции типа) написать заменяющий метод прямо внутри типа, а не использовать внешнюю по отношению к типу подпрограмму, которая семантически к типу отношения не имеет (тип - матрица, а Вы её "внутренности" отдаёте коду, работающему с векторами, разделяете логику в разные стороны). Попутно и все остальные подпрограммы раздать типам, имхо, но не обязательно, конечно, достаточно только метод изменения размера одного из векторов матрице отдать типу матрицы, дабы работало. Если же учитывать, что Вы хотите использовать смесь отдельных процедур и типов (с собственной логикой, такой как операторы, и возможно, методы) и доступ к внутренностям разрешаете при этом - то можно, конечно, написать как угодно. Например, строка, что Вызвала у Вас ошибку переписывается в SetLength(Matrix.M[i].V, j); Кстати, для таких задач как Ваша, придуманы стандартные обобщённые коллекции Array<> и List<> (модуль Generic.Collections), можно использовать их (и типопараметризовать вектором), почти весь Ваш код их повторяет в велосипедном ключе (излишен, ненадёжен и неполон). Последний раз редактировалось phomm; 30.09.2015 в 07:05. |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с матрицами (Delphi) | Elenachu | Помощь студентам | 0 | 15.01.2014 00:25 |
Работа с Матрицами (Delphi 7) | Дмитрий5 | Помощь студентам | 0 | 22.12.2011 21:36 |
Работа с матрицами (Delphi) | Вета | Помощь студентам | 0 | 15.04.2009 15:37 |
Работа с матрицами (Delphi) | roman09 | Помощь студентам | 6 | 11.04.2009 11:32 |
Работа с матрицами (delphi) | Майструк Татьяна | Помощь студентам | 3 | 07.04.2009 20:33 |