The comparison operator can be overloaded to compare two different types or to compare two equal types that are not basic types. The result type of a comparison operator is always a boolean.

The comparison operators that can be overloaded are:

- equal to
- (=) To determine if two variables are equal.
- unequal to
- (<>) To determine if two variables are different.
- less than
- (<) To determine if one variable is less than another.
- greater than
- (>) To determine if one variable is greater than another.
- greater than or equal to
- (>=) To determine if one variable is greater than or equal to another.
- less than or equal to
- (<=) To determine if one variable is greater than or equal to another.

If there is no separate operator for unequal to (<>), then, to evaluate a statement that contains the unequal to operator, the compiler uses the equal to operator (=), and negates the result. The opposite is not true: if no ”equal to” but an ”unequal to” operator exists, the compiler will not use it to evaluate an expression containing the equal (=) operator.

As an example, the following operator allows to compare two complex numbers:

operator = (z1, z2 : complex) b : boolean;

the above definition allows comparisons of the following form:

Var

C1,C2 : Complex;

begin

If C1=C2 then

Writeln(’C1 and C2 are equal’);

end;

C1,C2 : Complex;

begin

If C1=C2 then

Writeln(’C1 and C2 are equal’);

end;

The comparison operator definition needs 2 parameters, with the types that the operator is meant to compare. Here also, the compiler doesn’t apply commutativity: if the two types are different, then it is necessary to define 2 comparison operators.

In the case of complex numbers, it is, for instance necessary to define 2 comparisons: one with the complex type first, and one with the real type first.

Given the definitions

operator = (z1 : complex;r : real) b : boolean;

operator = (r : real; z1 : complex) b : boolean;

operator = (r : real; z1 : complex) b : boolean;

the following two comparisons are possible:

Var

R,S : Real;

C : Complex;

begin

If (C=R) or (S=C) then

Writeln (’Ok’);

end;

R,S : Real;

C : Complex;

begin

If (C=R) or (S=C) then

Writeln (’Ok’);

end;

Note that the order of the real and complex type in the two comparisons is reversed.