Семантика перегружаемой операторной функции определяется решаемыми задачами и фантазией разработчика.
// Бинарные операции также обязаны возвращать значения!
public static Point2D operator + (Point2D par1, Point2D par2)
{
return new Point2D(par1.x+par2.x,par1.y+par2.y);
}
// Реализуется алгоритм “сложения” значения типа Point2D со значением типа float.
// От перемены мест слагаемых сумма НЕ ИЗМЕНЯЕТСЯ. Однако эта особенность нашей
// операторной функции “сложения” (операции “сложения”) должна быть прописана
// программистом. В результате получаем ПАРУ операторных функций, которые отличаются
// списками параметров.
// Point2D + float
public static Point2D operator + (Point2D par1, float val)
{
return new Point2D(par1.x+val,par1.y+val);
}
// float + Point2D
public static Point2D operator + (float val, Point2D par1)
{
return new Point2D(val+par1.x,val+par1.y);
}
А вот применение этих функций. Внешнее сходство выражений вызова операторных функций с обычными выражениями очевидно. И при этом иного способа вызова операторных функций нет!
…p1 + p2…
…3.14 + p2…
… p2 + 3.14…
Операции сравнения реализуются аналогично. Хотя не существует никаких ограничений на тип возвращаемого значения, в силу специфики применения (обычно в условных выражениях операторов управления) операций сравнения всё же имеет смысл определять их как операторные функции, возвращающие значения true и false.
public static bool operator == (myPoint2D par1, myPoint2D par2)
{
if (par1.x==par2.x && par1.y==par2.y)
return true;
else
return false;
}
public static bool operator != (myPoint2D par1, myPoint2D par2)
{
if (par1.x!=par2.x || par1.y!=par2.y)
return true;
else
return false;
}