ООП во FP, робота с обьектами |
ООП во FP, робота с обьектами |
volvo |
24.06.2007 22:01
Сообщение
#21
|
Гость |
Цитата можно ли для класса описать сравнение с нулем? Это смотря что ты хочешь сравнивать с нулем... То есть, что (для твоего класса) значит равенство нулю?Для объекта можно было бы также переопределить "operator =", сравнивающий экземпляр объекта с целым числом, например... Для классов перегрузка операций проблематична. |
мисс_граффити |
24.06.2007 22:01
Сообщение
#22
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
сорри, FPC у меня нет, проверить могу только в делфи. но идея, наверное, понятна:
T=class -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
compiler |
25.06.2007 11:22
Сообщение
#23
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
через метод не так интересно... интересно было бы именно перегрузкой операторов...
что б можна было скажем написать ...if a<>0 then ..., где а -- пользовательский тип, имеющий два поля целых чисел, и равнявшийся нулю, если оба поля равны нулю... -------------------- Спасибо!
Удачи! |
volvo |
25.06.2007 14:08
Сообщение
#24
|
Гость |
В таком случае (если у тебя 2 поля должны быть одновременно нулевыми чтобы объект считался нулевым) тебе лучше перегрузить оператор not:
{$mode ObjFpc} Сообщение отредактировано: volvo - 25.06.2007 14:08 |
compiler |
25.06.2007 14:23
Сообщение
#25
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
В таком случае (если у тебя 2 поля должны быть одновременно нулевыми чтобы объект считался нулевым) тебе лучше перегрузить оператор not... идея интересная, но мне понадобится сравнивать и с другими числами(по крайней мере еще с одним)... Цитата Для классов перегрузка операций проблематична. а где про нее можна прочитать?-------------------- Спасибо!
Удачи! |
volvo |
25.06.2007 15:55
Сообщение
#26
|
Гость |
Цитата идея интересная, но мне понадобится сравнивать и с другими числами Ты бы уточнял, ЧЕГО ты хочешь? Либо КАЖДОЕ поле сравнивать с ОДНИМ И ТЕМ ЖЕ числом(тогда - вот так: operator = (const X: T; const i: integer): boolean; ) , либо (что в конце концов тебе выяснится, тебе и было нужно) каждое поле - с РАЗНЫМ числом... Цитата а где про нее можна прочитать? Нигде нельзя... Попробуй то же самое сделать для Class-а, а не для Object-а, получишь ошибку компиляции... Для Object-ов и Record-ов все прекрасно работает... |
compiler |
27.06.2007 16:53
Сообщение
#27
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
Либо КАЖДОЕ поле сравнивать с ОДНИМ И ТЕМ ЖЕ числом, либо (что в конце концов тебе выяснится, тебе и было нужно) каждое поле - с РАЗНЫМ числом... посижу подумаю... -------------------- Спасибо!
Удачи! |
compiler |
2.07.2007 13:47
Сообщение
#28
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
Добрый день!
У меня есть вопрос, мне надо перегрузить оператор присваивания... у меня он должен заключаться в следующем 1) присваивания между обьектами одного класса происходит стандартно(выражение слева приобретает выражение справа) 2) возможно когда выражение справа есть некий символ (а еще лучше если можно было бы использовать строку) тоесть есть класс направление (содержащий два поля -- x, y.). если я пишу direction:='left';, тогда должно происходить следующее direction.x:= -1; direction.y:=0;. Заранее благодарен. Добавлено через 3 мин. и еще, нельзя ли использовать различные методы сравнения(в смысле перезагруженные операторы сравнения) в зависимости от передаваемых параметров? Сообщение отредактировано: compiler - 2.07.2007 13:51 -------------------- Спасибо!
Удачи! |
volvo |
2.07.2007 19:16
Сообщение
#29
|
Гость |
{$mode objfpc} Цитата нельзя ли использовать различные методы сравнения(в смысле перезагруженные операторы сравнения) в зависимости от передаваемых параметров? Можно, только для этого должны перегружаться операторы для сравнения данных разных типов... Например, так:// Тут твой тип будет сравниваться с целым числом |
compiler |
4.07.2007 17:34
Сообщение
#30
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
Огромное спасибо! но у меня есть пару вопросов, может некоторые прямо не касающееся темы...
еще раз спасибо! -------------------- Спасибо!
Удачи! |
volvo |
4.07.2007 17:55
Сообщение
#31
|
Гость |
1.
Цитата dir это множество? Нет, это перечислимый тип.2. Непонятен способ описания константы? Смотри, есть 2 способа. Можно сделать так: type Но ведь, если мне больше нигде не нужно описание типа myrec (ну не собираюсь я его использовать больше в программе), то я могу определить этот тип прямо в описании константы. И теперь вступает в силу вот такое ограничение: я собственно тип "запись" нигде использовать не могу (поскольку он безымянный), а обращаться к полям записи через элемент массива - пожалуйста. Что и делается... А array[dir] - собственно, создается массив такой длины, сколько элементов существует в перечислимом типе dir... То есть, приведенное выше объявление эквивалентно: const или даже const Но я бы все-таки не рекомендовал пользоваться последним описанием, очень велика вероятность нарваться на ошибку, которую при первом описании ты не совершишь никогда (она будет поймана еще на этапе компиляции). |
compiler |
4.07.2007 18:06
Сообщение
#32
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
1. Нет, это перечислимый тип. а где про него можна почитать? И чем он отличается от множества?остальное вроде ясно. спасибо! -------------------- Спасибо!
Удачи! |
volvo |
4.07.2007 18:11
Сообщение
#33
|
Гость |
Перечислимые типы
сравни с: Множественные типы Цитата И чем он отличается от множества? Ну, допустим, тем что множество - это набор значений некоего базового типа, а перечислимый тип определяет совершенно новый тип, никак не связанный ни с одним из уже существующих...Сообщение отредактировано: volvo - 4.07.2007 18:14 |
compiler |
4.07.2007 18:32
Сообщение
#34
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
с горем пополам вроде понл
совершенно новый тип, никак не связанный ни с одним из уже существующих... а вот это заинтересовало... можем ли мы с нуля создать свой integer-------------------- Спасибо!
Удачи! |
volvo |
4.07.2007 18:45
Сообщение
#35
|
Гость |
Нет... Во всяком случае - с помощью перечислимых типов - нет. Элементы таких типов должны быть правильными идентификаторами, а ты хочешь, чтобы тип содержал числа, так? Число правильным идентификатором не является.
Кроме всего прочего есть ограничение на размер перечислимых типов - 256 элементов. Integer побольше будет, я думаю... |
compiler |
4.07.2007 19:05
Сообщение
#36
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
а вообще возможно ли такое реализовать(именно с нуля)?
-------------------- Спасибо!
Удачи! |
volvo |
4.07.2007 19:20
Сообщение
#37
|
Гость |
А зачем? У тебя же есть уже Integer, зачем второй тебе? Ладно бы, задумал реализовать Int256 или Int1024, например, чтоб с длинными числами работать (кстати, уже было на форуме. Как-то для Aelita я делал подобную реализацию Int256)... Можно, например, реализовать так же, как в "Длинной арифметике", только ограничить количество элементов массива.
Перегрузка операций есть, значит, с переводом (строка -> число) и (число -> строка) проблем не будет. Сравнение элементов нового типа - тоже не проблема... Все реализуемо... |
compiler |
4.07.2007 19:26
Сообщение
#38
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
А зачем? когда-то хотел ради интереса, но практического применения не нашел... хотя нет, если я захочу сделать свой компилятор( ), мне может это понадобится... но оставим это на потом...-------------------- Спасибо!
Удачи! |
compiler |
4.07.2007 20:28
Сообщение
#39
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
двигаюсь дальше появляются новые ошибки... в этот раз
Цитата Only static variables can be used in static methods or outside methods в методе
function getXMax():integer; //publicчто делать? -------------------- Спасибо!
Удачи! |
volvo |
4.07.2007 21:09
Сообщение
#40
|
Гость |
map это у тебя что? Не имя ли объекта? Если так, то нельзя обращаться к матрице в НЕклассовом методе через map.a, достаточно написать просто:
function getXMax(): integer; |
Текстовая версия | 27.09.2024 17:29 |