Язык программирования C++ для профессионалов

d51f8a0c

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


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

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, complex); 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>).



Содержание раздела