Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет190/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   186   187   188   189   190   191   192   193   ...   256
Байланысты:
Бьерн Страуструп. Язык программирования С . М Бином, 2011

10.3.3 Ввод пользовательских типов 
Операцию ввода для пользовательского типа можно определить в точности так же, как и операцию 
вывода, но для операции ввода существенно, чтобы второй параметр имел тип ссылки, например: 
istream& operator>>(istream& s, complex& a) 
/* 
формат input рассчитан на complex; "f" обозначает float: 




( f , f ) 
*/ 

double re = 0, im = 0; 
char c = 0; 
s >> c; 
if (c == '(') { 
s >> re >> c; 
if (c == ',') s >> im >> c; 
if (c != ')') s.clear(ios::badbit); // установим состояние 

else 

s.putback(c); 

>> 
re; 

if (s) a = complex(re,im); 
return 
s; 

Несмотря на сжатость кода, обрабатывающего ошибки, на самом деле учитывается большая часть 
ошибок. Инициализация локальной переменной с нужна для того, чтобы в нее не попало случайное 
значение, например '(', в случае неудачной операции. Последняя проверка состояния потока 
гарантирует, что параметр a получит значение только при успешном вводе. 
Операция, устанавливающая состояние потока, названа clear() (здесь clear - ясный, правильный), 
поскольку чаще всего она используется для восстановления состояния потока как good(); значением по 
умолчанию для параметра ios::clear() является ios::goodbit. 


Бьерн Страуструп.
Язык программирования С++ 
 
266 
10.4 Форматирование 
Все примеры из 10.2 содержали неформатированный вывод, который являлся преобразованием 
объекта в последовательность символов, задаваемую стандартными правилами, длина которой также 
определяется этими правилами. Часто программистам требуются более развитые возможности. Так, 
возникает потребность контролировать размер памяти, необходимой для операции вывода, и формат, 
используемый для выдачи чисел. Точно так же допустимо управление некоторыми аспектами ввода. 


Достарыңызбен бөлісу:
1   ...   186   187   188   189   190   191   192   193   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет