Форум: "Начинающим";
Текущий архив: 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