15.5 Операторы сравнения |
Вверх Предыдущий Следующий |
Оператор сравнения может быть перегружен, чтобы сравнить два различных или два одинаковых типа, не являющихся стандартными. Тип результата оператора сравнения всегда будет boolean. Могут быть перегруженными следущие операторы сравнения: равно неравно меньше больше больше или равно меньше или равно Если нет отдельного оператора неравно (<>), чтобы оценить на неравенство выражение, компилятор использует оператор равно (=), и логически отрицает результат операции. Обратное не верно: если нет оператора "равно", а оператор "неравно" существует, то компилятор не будет использовать его, чтобы оценить выражение, содержащее оператор равно (=). В качестве примера, следующий оператор позволяет сравнивать два комплексных числа: operator = (z1, z2 : complex) b : boolean; приведенное выше определение позволяет сделать сравнение следующего вида: Var C1,C2 : Complex;
begin If C1=C2 then Writeln('C1 и C2 равны'); end; Определение оператора сравнения требует двух параметров, с типами, которые определены при объявлении оператора. Компилятор не применяет коммутативности (не переставляет аргументы): если аргументы двух различных типов, то необходимо определить два оператора сравнения. В случае комплексных чисел, например, необходимо определить два оператора сравнения: один с аргументом комплексного типа впереди, потом вещественного типа, второй оператор - наоборот (сначала вещественного, потом комплексного типа). С учетом определения операторов operator = (z1 : complex; r : real) b : boolean; operator = (r : real; z1 : complex) b : boolean; возможны следующие два сравнения: Var R,S : Real; C : Complex; begin If (C=R) or (S=C) then Writeln ('Ok'); end; Обратите внимание, что порядок аргументов вещественных и комплексных типов в двух сравнениях, меняется. |