Строение класса 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.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий