Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.05.27;
Скачать: [xml.tar.bz2];

Вниз

В Delphi можно сравнивать записи одного типа?   Найти похожие ветки 

 
Artem   (2012-01-19 18:57) [0]

В Delphi можно сравнивать записи одного типа?
=
<>


 
Dimka Maslov ©   (2012-01-19 19:20) [1]

нет


 
Самуилыч   (2012-01-19 19:44) [2]

CompareMem, если в записях нет указателей (в том числе объектов, динамических массивов, длинных строк и т.п.).


 
Anatoly Podgoretsky ©   (2012-01-19 21:00) [3]

И выравнивание отключено :-)


 
oxffff ©   (2012-01-19 21:52) [4]

Можно. Можно и разных.
Read
http://docwiki.embarcadero.com/RADStudio/en/Operator_Overloading_%28Delphi%29


 
KilkennyCat ©   (2012-01-20 04:21) [5]

ну на равенство я бы еще понял смысл, удалить дубликаты... а меньше-больше - если такой смысл есть, то с головой явно беда.


 
megavoid ©   (2012-01-20 12:06) [6]

> Operator_Overloading
так можно и строку на запись умножить :)


 
Inovet ©   (2012-01-20 12:17) [7]

> [5] KilkennyCat ©   (20.01.12 04:21)
> а меньше-больше - если такой смысл есть, то с головой явно беда.

Ну почему нет, если такая опереция определена над множеством.

> [6] megavoid ©   (20.01.12 12:06)
> так можно и строку на запись умножить :)

Аналогично.


 
jack128_   (2012-01-20 12:52) [8]


> ну на равенство я бы еще понял смысл, удалить дубликаты.
> .. а меньше-больше - если такой смысл есть, то с головой
> явно беда.

на например чтоб длинную арифметику реализовать. и соответсвтенно, чтоб мождно было на больше меньше две записи "TBigInt" сравнивать.


 
Дмитрий Белькевич   (2012-01-20 14:22) [9]


> ну на равенство я бы еще понял смысл, удалить дубликаты.
> .. а меньше-больше - если такой смысл есть, то с головой
> явно беда.


Да ладно... Мало ли какие данные там хранятся и что с ними нужно делать. Хотя бы для сортировки записей тем же квиксортом.


 
Самуилыч   (2012-01-20 14:31) [10]

Мне другое непонятно. Чтобы перегрузить оператор, надо писать код. Но точно такой же код можно написать и в функции, а потом вызывать ее где угодно. Так в чем же польза?


 
Inovet ©   (2012-01-20 14:39) [11]

> [10] Самуилыч   (20.01.12 14:31)
> Так в чем же польза?

В том что пишется один шаблон
if a < b
а компилятор в зависимости от типа подставит что надо именно для этого типа.


 
KilkennyCat ©   (2012-01-21 01:38) [12]


> jack128_   (20.01.12 12:52) [8]
> Дмитрий Белькевич   (20.01.12 14:22) [9]

понятно. с арифметикой особенно убедило.
хотя, мне кажется, чаще всего записи -винегрет сплошной, хрен их на меньше больше целиком сравнишь. точнее, хрен поймешь результат. или мне везет просто на такие записи.


 
Германн ©   (2012-01-21 02:43) [13]


> KilkennyCat ©   (21.01.12 01:38) [12]
>
>
> > jack128_   (20.01.12 12:52) [8]
> > Дмитрий Белькевич   (20.01.12 14:22) [9]
>
> понятно. с арифметикой особенно убедило.

Меня тоже пример с арифметикой убедил. Но...


 
Anatoly Podgoretsky ©   (2012-01-21 11:11) [14]

Нельзя снять выровненые записи, они полны мусора


 
oxffff ©   (2012-01-21 12:05) [15]

Из моего кода

 TExpressionValueAbstractPenalty=record
 private
 PenaltyCountP,PenaltyCountN: DWORD;
 public
 constructor create(PenaltyCountP,PenaltyCountN: DWORD);
 class operator Add(a:TExpressionValueAbstractPenalty;b:TExpressionValueAbstractPenalty):TExpres sionValueAbstractPenalty;
 class operator Equal(a:TExpressionValueAbstractPenalty;b:TExpressionValueAbstractPenalty):boole an;
 class operator LessThan(a:TExpressionValueAbstractPenalty;b:TExpressionValueAbstractPenalty):bo olean;
 class operator GreaterThan(a:TExpressionValueAbstractPenalty;b:TExpressionValueAbstractPenalty) :boolean;
 end;

 TExpressionValueAbstractPriority = record
 private
 PriorityClass:TExpressionValueAbstractPriorityClass;
 Penalty:TExpressionValueAbstractPenalty;
 public
 constructor create(PriorityClass: TExpressionValueAbstractPriorityClass;
                    PenaltyCountP: DWORD;
                    PenaltyCountN: DWORD);
 class operator Equal(a:TExpressionValueAbstractPriority;b:TExpressionValueAbstractPriority):boo lean;
 class operator LessThan(a:TExpressionValueAbstractPriority;b:TExpressionValueAbstractPriority): boolean;
 class operator GreaterThan(a:TExpressionValueAbstractPriority;b:TExpressionValueAbstractPriorit y):boolean;
 end;

Пример использования

....

     if ((DestExpression.GetPriority > LeftPriority) and
         (LocalPriority < RightPriority)) or
         ((DestExpression.GetPriority < LeftPriority) and
         (LocalPriority > RightPriority)) then
       begin
         raise Exception.create("Ошибка! Critical error 49949  :)");
       end;
       if (DestExpression.GetPriority > LeftPriority) then
       begin
         LeftPriority := DestExpression.GetPriority;
         RightPriority := LocalPriority;
         AdditionalPenalty := LocalAdditionalPenalty;
         lValidatorResult.Left := DestExpression;
         lValidatorResult.Right := RightValueExpr;
       end
       else if (DestExpression.GetPriority = LeftPriority) then
         if LocalPriority > RightPriority then
         begin
           LeftPriority := DestExpression.GetPriority;
           RightPriority := LocalPriority;
           AdditionalPenalty := LocalAdditionalPenalty;
           lValidatorResult.Left := DestExpression;
           lValidatorResult.Right := RightValueExpr;
         end
         else if LocalPriority = RightPriority then
           if LocalAdditionalPenalty < AdditionalPenalty then
           begin
             LeftPriority := DestExpression.GetPriority;
             RightPriority := LocalPriority;
             AdditionalPenalty := LocalAdditionalPenalty;
             lValidatorResult.Left := DestExpression;
             lValidatorResult.Right := RightValueExpr;
           end
           else if LocalAdditionalPenalty = AdditionalPenalty then
           begin
             lValidatorResult.Left := nil;
             lValidatorResult.Right := nil;
           end;
................


 
oxffff ©   (2012-01-21 12:11) [16]

Этот пример из кода который пытается разрешить неоднозначность при присваивании в зависимости от приоритетов и дополнительных действий


 
KilkennyCat ©   (2012-01-21 12:17) [17]


> oxffff ©   (21.01.12 12:05) [15]

надеюсь, ты не копи-пасте делал, а так, по памяти сюда вогнал :)


 
oxffff ©   (2012-01-21 12:34) [18]

Да, нет это копипаст.
Это место неоднократно переписывалось при введении сначала penalty по upcast, потом классу выражений, потом downcast.
А если намек на то, что можно написать более составное условие для

LeftPriority := DestExpression.GetPriority;
RightPriority := LocalPriority;
AdditionalPenalty := LocalAdditionalPenalty;
lValidatorResult.Left := DestExpression;
lValidatorResult.Right := RightValueExpr;

то на это есть свои причины.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2012.05.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.003 c
2-1327321388
jiura
2012-01-23 16:23
2012.05.27
Как определить тип данных (число текст, дата) в переменной*


3-1276053430
O.O
2010-06-09 07:17
2012.05.27
Замена алгоритма в вычисляемое поле Firebird


15-1327091402
Юрий
2012-01-21 00:30
2012.05.27
С днем рождения ! 21 января 2012 суббота


2-1326979548
Artem
2012-01-19 17:25
2012.05.27
Как по-простому обнулить record?


15-1326849816
Димка На
2012-01-18 05:23
2012.05.27
rs232 по витой паре.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский