Шаг 421.
Библиотека STL. Числовые типы. Строение класса complex. Операции создания, копирования и присваивания

    На этом шаге мы рассмотрим особенности использования перечисленных операций.

    Для выполнения указанных действий можно использовать следующие операции:

  complex::complex ()
Конструктор по умолчанию.

    Создает комплексное значение, в котором вещественная и мнимая части инициализируются вызовом конструкторов по умолчанию (0 для базовых типов данных). Это означает, что для базовых типов данных исходные значения вещественной и мнимой частей равны 0.

  complex::complex (const T& re)
Создает комплексное значение, в котором вещественная часть равна re, а мнимая часть инициализируется вызовом конструктора по умолчанию (0 для базовых типов данных).

    Конструктор также определяет автоматическое преобразование типа Т в 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)
Присваивает значение комплексного числа cmplx. Возвращает *this.

    Функция определяется в обеих формах: шаблонной и обычной (шаблонные функции классов описаны на 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)
Сложение, вычитание, умножение и деление cmplx и *this с сохранением результата в *this.

    Операторы возвращают *this.

    Операции определяются в обеих формах: как шаблонные и обычные функции. Тем самым обеспечивается автоматическое преобразование к типу элементов (это относится и к специализированным версиям из стандартной библиотеки C++). Обратите внимание: операторы присваивания - единственные функции, позволяющие изменить значение существующего объекта complex.

    На следующем шаге мы рассмотрим обращение к данным.




Предыдущий шаг Содержание Следующий шаг