На этом шаге мы рассмотрим методы, создающие комплексное число.
В таблице 1 перечислены конструкторы и операции присваивания для типа complex. Конструкторам могут передаваться исходные значения вещественной и мнимой частей. Если значения не заданы, они инициализируются конструктором по умолчанию для соответствующего типа.
Выражение | Эффект |
---|---|
complex с | Создает комплексное число с нулевой вещественной и мнимой частями (0+0i) |
complex c(1.3) | Создает комплексное число с вещественной частью 1.3 и нулевой мнимой частью (1.3+0i) |
complex c(1.3, 2.4) | Создает комплексное число с вещественной частью 1.3 и мнимой частью 2.4 (1.3+2.4i) |
complex c1(c2) | Создает комплексное число c1 как копию с2 |
polar(4.2) | Создает временное комплексное число по полярным координатам (амплитуда = 4.2, фазовый угол = 0) |
polar(4.2, 0.75) | Создает временное комплексное число по полярным координатам (амплитуда = 4.2, фазовый угол = 0.75) |
conj(c) | Создает временное комплексное число, сопряженное с числом с (то есть комплексное число с противоположным знаком мнимой части) |
c1 = с2 | Присваивает c1 вещественную и мнимую части с2 |
c1 += С2 | Прибавляет с2 к c1 |
c1 -= c2 | Вычитает с2 из c1 |
c1 *= с2 | Умножает c1 на с2 |
c1 /= с2 | Делит c1 на с2 |
Значение существующего комплексного числа может быть изменено только при помощи операторов присваивания. Комбинированные операторы присваивания +=, -=, *= и /= осуществляют суммирование, вычитание, умножение и деление значений двух комплексных операндов.
Вспомогательная функция polar() позволяет создать комплексное число, инициализируемое в полярных координатах (через амплитуду и фазовый угол, указанный в радианах):
// Создание комплексного числа с инициализацией в полярных координатах
std::complex<double> c2(std::polar(4.2.0.75));
Если в создании комплексного числа задействовано неявное преобразование типа, возникает проблема. Например, следующее решение работает нормально:
std::complex<float> c2(std::polar(4.2,0.75)); // OК
Однако похожая запись со знаком равенства ошибочна:
std::complex<float> c2 = std::polar(4.2.0.75); // ОШИБКА
Эта проблема рассматривается далее.
Вспомогательная функция conj() позволяет создать комплексное число, инициализированное значением, сопряженным с другим комплексным числом (то есть комплексным числом с противоположным знаком мнимой части):
std::complex<double> с1(1.1,5.5); std::complex<double> c2(conj(c1)); // c2 инициализируется как // complex<double>(l.1,-5.5)
На следующем шаге мы рассмотрим неявные преобразования типов.