Объектно-ориентированное программирование на C++. Андрианова А.А - 128 стр.

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
if (double(*this) > double(a))
return false;
return true;
}
Каждая арифметическая операция (+, -, *, /) перегружена тремя
функциями-операторами для случаев, когда:
операндами операции являются объекты класса Fraction;
первый операнд – дробь, второй – целое число;
первый операнд – целое число, второй – объект-дробь.
Для первых двух случаев создаются методы класса, для третьего
случая дружественная функция с двумя параметрами. Результатом
выполнения этих операторов является новая дробь. Оператор сложения
двух дробей после формирования результата осуществляет
преобразование к смешанному виду.
// операция сложения двух дробей
Fraction Fraction::operator + (Fraction a)
{
Fraction res;
res.numerator = sign * (intPart * denominator +
numerator) * a.denominator +
a.sign *(a.intPart * a.denominator +
a.numerator) * denominator;
res.denominator = denominator * a.denominator;
if (res.numerator < 0)
{
res.numerator *= -1; res.sign = -1;
}
res.GetMixedView();
return res;
}
В определении функции сложения дроби с целым числом
осуществляется преобразование этого целого числа в дробь (создается
новый объект класса Fraction, значение которого равно целому числу)
и вызов оператора сложения двух дробей.
// операция сложения дроби и целого числа
Fraction Fraction::operator + (int a)
{
Fraction res;
Fraction b(0, 1, abs(a), a/abs(a)); // b = a
res = (*this) + b; //сложение двух дробей
return res;
128
                              Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
          if (double(*this) > double(a))
               return false;
          return true;
      }

     Каждая арифметическая операция (+, -, *, /) перегружена тремя
функциями-операторами для случаев, когда:
        • операндами операции являются объекты класса Fraction;
        • первый операнд – дробь, второй – целое число;
        • первый операнд – целое число, второй – объект-дробь.
     Для первых двух случаев создаются методы класса, для третьего
случая – дружественная функция с двумя параметрами. Результатом
выполнения этих операторов является новая дробь. Оператор сложения
двух    дробей    после  формирования       результата   осуществляет
преобразование к смешанному виду.

      // операция сложения двух дробей
      Fraction Fraction::operator + (Fraction a)
      {
           Fraction res;
           res.numerator = sign * (intPart * denominator +
                 numerator) * a.denominator +
                 a.sign *(a.intPart * a.denominator +
                 a.numerator) * denominator;
           res.denominator = denominator * a.denominator;
           if (res.numerator < 0)
           {
                res.numerator *= -1; res.sign = -1;
           }
           res.GetMixedView();
           return res;
      }

    В определении функции сложения дроби с целым числом
осуществляется преобразование этого целого числа в дробь (создается
новый объект класса Fraction, значение которого равно целому числу)
и вызов оператора сложения двух дробей.
      // операция сложения дроби и целого числа
      Fraction Fraction::operator + (int a)
      {
           Fraction res;
           Fraction b(0, 1, abs(a), a/abs(a));    // b = a
           res = (*this) + b; //сложение двух дробей
           return res;


128