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

UptoLike

Объектно-ориентированное программирование на С++
}
// определение дружественной функции сложения
// целого числа и дроби
Fraction operator + (int a, Fraction c)
{
Fraction res;
Fraction b(0, 1, abs(a), a/abs(a)); // b = a
res = b + c; //сложение двух дробей
return res;
}
Аналогичным образом определяют и другие арифметические
операции.
Оператор "<<" осуществляет вывод дроби в привычном
математическом виде с учетом существования целой или дробной части.
Этот же оператор может использоваться и для записи дроби в файл. Для
последующего корректного прочтения данных из файла требуется
разделять два числа символом, отличным от пробела (поскольку пробел
является разделителем между целой и дробной частями числа).
Разделителем в данном случае является символ табуляции ('\t').
// операция печати дроби
ostream& operator << (ostream& out, Fraction& a)
{
// знак числа печатается только
// если число отрицательно
if (a.sign < 0)
out << "-";
// если целая часть не равна 0, выводим ее
if (a.intPart != 0)
out << a.intPart << " ";
// дробная часть печатается, если числитель не равен
if (a.numerator != 0)
out << a.numerator << "/" << a.denominator;
// если и целая часть и дробная часть равны 0,
// то число равно 0
if (a.intPart == 0 && a.numerator == 0)
out << "0";
// если вывод осуществляется в файл,
// используется символ '\t'
if(typeid(ofstream) == typeid(out))
out << "\t";
else out << " ";
return out;
}
129
                          Объектно-ориентированное программирование на С++
     }

     // определение дружественной функции сложения
     // целого числа и дроби
     Fraction operator + (int a, Fraction c)
     {
          Fraction res;
          Fraction b(0, 1, abs(a), a/abs(a));     // b = a
          res = b + c;        //сложение двух дробей
          return res;
     }

    Аналогичным образом определяют и другие арифметические
операции.
    Оператор     "<<"     осуществляет вывод дроби в привычном
математическом виде с учетом существования целой или дробной части.
Этот же оператор может использоваться и для записи дроби в файл. Для
последующего корректного прочтения данных из файла требуется
разделять два числа символом, отличным от пробела (поскольку пробел
является разделителем между целой и дробной частями числа).
Разделителем в данном случае является символ табуляции ('\t').

     // операция печати дроби
     ostream& operator << (ostream& out, Fraction& a)
     {
          // знак числа печатается только
          // если число отрицательно
          if (a.sign < 0)
               out << "-";
          // если целая часть не равна 0, выводим ее
          if (a.intPart != 0)
               out << a.intPart << " ";
          // дробная часть печатается, если числитель не равен
          if (a.numerator != 0)
               out << a.numerator << "/" << a.denominator;
          // если и целая часть и дробная часть равны 0,
          // то число равно 0
          if (a.intPart == 0 && a.numerator == 0)
               out << "0";
          // если вывод осуществляется в файл,
          // используется символ '\t'
          if(typeid(ofstream) == typeid(out))
               out << "\t";
          else out << " ";
          return out;
     }
                                                                      129