На этом шаге мы рассмотрим особенности использования операций ввода-вывода.
В классе complex определены стандартные операторы ввода-вывода << и >> (таблица 1).
Выражение | Описание |
---|---|
strm << с | Записывает комплексное число с в выходной поток данных strm |
strm >> с | Читает комплексное число с из входного потока данных strm |
Оператор >> выводит комплексное число в поток данных в следующем формате:
(вещественная_часть, мнимая_часть)
Эквивалентная реализация оператора вывода выглядит так:
template <class T, class charT, class traits> std::basic_ostream<charT,traits>& operator<< (std::basic_ostream<charT,traits>& strm, const std::complex<T> c) { // Временная строка для выполнения вывода с одним аргументом std::basic_ostringstream<charT,traits> s; s.flags(strm,flags()); // Копирование флагов потока s.imbue(strm,getloc()); // Копирование локального контеста потока s.precision(strm.precision()); // Копирование точности потока // Подготовка итоговой строки s << '(' << с.real() << '.' << c.imag() << ')'; // Вывод итоговой строки strm << s.str(); return strm; }
Оператор ввода читает комплексные числа в одном из представленных ниже форматов:
(вещественная_часть, мнимая_часть) (вещественная_часть) вещественная_часть
Если очередные символы во входном потоке данных не соответствуют ни одному из перечисленных форматов, устанавливается флаг ios::failbit, что может привести к соответствующему исключению.
К сожалению, вы не можете задать собственный разделитель для вещественной и мнимой частей комплексного числа. А это означает, что при использовании запятой в качестве "десятичной точки" (как, например, в Германии или России) вводимые/выводимые данные выглядят довольно странно. Например, комплексное число с вещественной частью 4.6 и мнимой частью 2.7 записывается в виде: (4,6,2,7).
Примеры использования операций ввода-вывода приведены в 411 и 412 шагах.
На следующем шаге мы рассмотрим трансцендентные функции.