На этом шаге мы рассмотрим особенности использования перечисленных операций.
Для выполнения указанных действий можно использовать следующие операции:
complex::complex ()
Создает комплексное значение, в котором вещественная и мнимая части инициализируются вызовом конструкторов по умолчанию (0 для базовых типов данных). Это означает, что для базовых типов данных исходные значения вещественной и мнимой частей равны 0.
complex::complex (const T& re)
Конструктор также определяет автоматическое преобразование типа Т в complex.
complex::complex (const T& re, const T& im)
Создает комплексное значение, в котором вещественная и мнимая части равны соответственно re и im.
complex polar (const T& rho) complex polar (const T& rho const T& theta)
Параметр rho определяет амплитуду. Параметр theta определяет фазовый угол в радианах (по умолчанию 0).
complex conj (const complex& cmplx)
complex::complex (const complex& cmplx)
Создает новое комплексное число как копию cmplx.
Копирует вещественную и мнимую части.
Функция определяется в обеих формах: шаблонной и обычной. Таким образом, конструктор обеспечивает автоматическое преобразование к типу элементов.
В специализированных версиях для типов float, double и long double копирующие конструкторы ограничиваются так, чтобы небезопасные преобразования (double и long double в float, long double в double) выполнялись явно, а другие преобразования к типу элементов были запрещены:
namespace std { template<> class complex<float> { public: explicit complex(const complex<double>&); explicit complex(const complex<long double>)&); // Другие версии копирующих конструкторов отсутствуют ... }; template<> class complex<double> { public: complex(const complex<float>&); explicit complex(const complex<long double>)&); // Другие версии копирующих конструкторов отсутствуют ... }; template<> class complex<long double> { public: complex(const complex<float>&); complex(const complex<double>)&); // Другие версии копирующих конструкторов отсутствуют ... }; }
На 414 шаге приведена дополнительная информация по этой теме.
complex& complex::operator= (const complex& complx)
Функция определяется в обеих формах: шаблонной и обычной (шаблонные функции классов описаны на 33 шаге). Тем самым обеспечивается автоматическое преобразование к типу элементов (это относится и к специализированным версиям из стандартной библиотеки C++).
complex& complex::operator+= (const complex& cmplx) complex& complex::operator-= (const complex& cmplx) complex& complex::operator*= (const complex& cmplx) complex& complex::operator/= (const complex& cmplx)
Операторы возвращают *this.
Операции определяются в обеих формах: как шаблонные и обычные функции. Тем самым обеспечивается автоматическое преобразование к типу элементов (это относится и к специализированным версиям из стандартной библиотеки C++). Обратите внимание: операторы присваивания - единственные функции, позволяющие изменить значение существующего объекта complex.
На следующем шаге мы рассмотрим обращение к данным.