Практикум по курсу "Объектно-ориентированное программирование" на языке C#. Андрианова А.А - 15 стр.

UptoLike

14
// операция преобразования дроби в тип double
public static explicit operator double(Fraction ob)
{
double res = (double)ob.sign*(ob.intPart * ob.denominator +
ob.numerator) / ob.denominator;
return res;
}
Данное преобразование удобно будет использовать при сравнении
дробей.
Перегрузку операций сравнения двух дробей (больше, больше или
равно, меньше, меньше или равно, равно, не равно) осуществим с помощью
статических методов класса Fraction. Эти операторы должны возвращать
значение типа bool. Заметим, что эти операторы следует перегружать
«парами». Например, если класс содержит перегруженную операцию ==,
то обязательно в нем должна быть перегружена и операция ”!=.
Операторы == и != осуществляют поэлементное сравнение двух
дробей, которые представлены в смешанном виде. Остальные операторы
сравнения используют преобразование дроби к вещественному числу и
сравнивают полученные значения.
// операции сравнения двух дробей
public static bool operator == (Fraction ob1, Fraction ob2)
{
if (ob1.sign != ob2.sign || ob1.intPart != ob2.intPart ||
ob1.numerator * ob2.denominator !=
ob1.denominator * ob2.numerator)
return false;
return true;
}
public static bool operator != (Fraction ob1, Fraction ob2)
{
if (ob1.sign == ob2.sign && ob1.intPart == ob2.intPart &&
ob1.numerator * ob2.denominator ==
ob1.denominator * ob2.numerator)
return false;
return true;
}
public static bool operator > (Fraction ob1, Fraction ob2)
{
if ((double)ob1 <= (double)ob2)
return false;
return true;
}
  // операция преобразования дроби в тип double
  public static explicit operator double(Fraction ob)
  {
     double res = (double)ob.sign*(ob.intPart * ob.denominator +
                           ob.numerator) / ob.denominator;
     return res;
  }

      Данное преобразование удобно будет использовать при сравнении
дробей.
      Перегрузку операций сравнения двух дробей (больше, больше или
равно, меньше, меньше или равно, равно, не равно) осуществим с помощью
статических методов класса Fraction. Эти операторы должны возвращать
значение типа bool. Заметим, что эти операторы следует перегружать
«парами». Например, если класс содержит перегруженную операцию ”==”,
то обязательно в нем должна быть перегружена и операция ”!=”.
      Операторы ”==” и ”!=” осуществляют поэлементное сравнение двух
дробей, которые представлены в смешанном виде. Остальные операторы
сравнения используют преобразование дроби к вещественному числу и
сравнивают полученные значения.

  // операции сравнения двух дробей
  public static bool operator == (Fraction ob1, Fraction ob2)
  {
     if (ob1.sign != ob2.sign || ob1.intPart != ob2.intPart ||
               ob1.numerator * ob2.denominator !=
                               ob1.denominator * ob2.numerator)
        return false;
     return true;
  }

  public static bool operator != (Fraction ob1, Fraction ob2)
  {
     if (ob1.sign == ob2.sign && ob1.intPart == ob2.intPart &&
               ob1.numerator * ob2.denominator ==
                               ob1.denominator * ob2.numerator)
        return false;
     return true;
  }

  public static bool operator > (Fraction ob1, Fraction ob2)
  {
     if ((double)ob1 <= (double)ob2)
        return false;
     return true;
  }

                                                                    14