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>).


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.