Основы объектно-ориентированного программирования на языке C# book | Page 146
7 Класи
виконання
a = b++;
a буде указувати на туж саму дiлянку, що зберiгає (0,0). Тобто при
перевантаженнi повнiстю збережено семантику стандартних унарних
операцiй.
7.7.3 Перевантаження операторiв порiвняння
Тепер розглянемо як перевантажувати оператори порiвняння. В мовi
C# усi класи спакуються вiд класу Object , тому поряд iз стандар-
тними операторами, нам необхiдно також перевантажити два методи
цього класу Equals i GetHashCode . Метод Equals дозволяє порiвнюва-
ти два об’єкти, а метод GetHashCode обчислює хеш-код об’єкту. Якщо
метод Equals вважає, що два об’єкти рiвнi, то метод GetHashCode по-
винен згенерувати для них однаковi значення. Нагадаємо, що деякi
оператори необхiдно перевантажувати парами: == i != , < i <= , > i >= .
Покажемо, як перевантажити оператори порiвняння для нашого при-
клад точок на плоскостi. Будемо вважати. що точки спiвпадають,
якщо ı̈хнi координати рiвнi, одна точка менше/бiльше за iншу, якщо
вiдповiднi координати менше/бiльше.
public static bool operator ==( Point2D a, Point2D b)
{
if (a.x == b.x && a.y == b.y)
return true;
else return false;
}
public static bool operator !=( Point2D a, Point2D b)
{
if (a.x != b.x || a.y != b.y)
return true;
else return false;
}
public override bool Equals(object o)
{
if(o.GetType() != GetType())
return false;
Point2D t = (Point2D) o;
return (x == t.x && y == t.y);
}
public override int GetHashCode ()
{
return 0;
}
Розглянемо ще один приклад для закрiплення. Давайте напишемо
реалiзацiю засобами C# операцiı̈ iз звичайними дробами:
146