Бьерн Страуструп - Язык программирования С++. Главы 5-8
Страница 55. Пользовательские операции преобразования типа



7.3 Пользовательские операции преобразования типа

 Описанная во введении реализация комплексного числа является слишком
 ограниченной, чтобы удовлетворить кого-нибудь, и ее надо расширить.
 Делается простым повторением описаний того же вида, что уже были
 применены:

        class complex {
          double re, im;
        public:
          complex(double r, double i) { re=r; im=i; }

          friend complex operator+(complex, complex);
          friend complex operator+(complex, double);
          friend complex operator+(double, complex);

          friend complex operator-(complex, double);
          friend complex operator-(complex, double);
          friend complex operator-(double, complex);
          complex operator-();  // унарный -

          friend complex operator*(complex, complex);
          friend complex operator*(complex, double);
          friend complex operator*(double, complex);

          // ...
        };

  Имея такое определение комплексного числа, можно писать:

       void f()
       {
         complex a(1,1), b(2,2), c(3,3), d(4,4), e(5,5);
         a = -b-c;
         b = c*2.0*c;
         c = (d+e)*a;
       }

  Все-таки утомительно, как мы это только что делали для operator*()
  писать для каждой комбинации complex и double свою функцию. Более
  того, разумные средства для комплексной арифметики должны
  предоставлять десятки таких функций (посмотрите, например, как
  описан тип complex в <complex.h>).

 
« Предыдущая статья   Следующая статья »