Самостоятельная работа По Дисциплине: Программирования на тему: № Работа с численными классами. Класс complex


Download 432.11 Kb.
bet5/10
Sana23.12.2022
Hajmi432.11 Kb.
#1046730
TuriСамостоятельная работа
1   2   3   4   5   6   7   8   9   10
Bog'liq
Работа с численными классами. Класс complex - C.Бойзаков

2.4 Неявные преобразования типов

Конструкторы специализированных версий для типов float double и long double спроектированы так, чтобы безопасные преобразования типов (например, complex в complex) могли выполняться неявно, а потенциально рискованные преобразования (например, complex в complex) были:


std::complex cf;
std::complex cd;
std::complex cld;
std::complex cd1 =cf: // OK: безопасное преобразование
std::complex cd2 = сld: // ОШИБКА: нет неявного преобразования
std::complex cd3(cld); // OK: явное преобразование
He существует конструкторов, создающих комплексное число по другим комплексным типам. В частности, нельзя преобразовать complex с целым типом в complex с типом float, double или long double. Впрочем, преобразования можно выполнять при передаче вещественной и мнимой частей в отдельных аргументах:
std::complex cd;
std::complex ci;
std::complex cd4 = ci; // ОШИБКА: небезопасное преобразование std::complex cd5(ci); // ОШИБКА: нет явного преобразования
std: :complex cd6(ci.real () .ci .imag()); // OK
К сожалению, операторы присваивания позволяют выполнять небезопасные преобразования. Они определены в виде шаблонов для всех типов, поэтому присваивание допустимо для любых комплексных типов (при возможности пре-образования типа значения):
std: :complex cd;
std: :complex cld;
std::complex ci;
Эта проблема также относится к функциям polar() и conj(). Например, следующая запись работает нормально:
std::complex c2(std::polar(4.2.0.75)); // OK
С другой стороны, запись со знаком = не работает:
std::complex с2 = std::polar(4.2.0.75); // ОШИБКА
Дело в том, что выражение std::polar(4.2,0.75) создает временный объект complex, а неявное преобразование из complex в complex не определено.



Download 432.11 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling