|
Программирование >> Программирование на языке c++
Рассмотрим выражение cout wp(10,2); Здесь фактически вызывается следующая функщ1я: ostream& operator (cout,wp(10,2)) { return wi pre(cout,10,2); } Действительно, функция wp возвращает объект класса my manip с передачей в его конструктор параметров: wi pre, пит: my manip wp(int n.int m) { return my manip(wi pre,n,m); } Поскольку функция operator возвращает значение типа ostream&, то снова можно применять эту функцию, например, так: {operator (cout,wp(10,2)).operator (12.8764); или, что то же самое (это было пояснено в начале главы): cout wp(10,2) 12.8764; Поскольку первая функция operator изменила ширину поля и точность, то вторая функция operator выведет значение 12.8764 в нужном формате. По аналогии можно создавать и другие, определенные пользователем, манипуляторы. Рассмотрим еще один пример, в котором задаются некоторые новые простейшие манипуляторы. #include <iostream.h> #include <iomanip.h> #include <conio.h> ostream& set scr(ostream& o) манипулятор set scr { cIrscrO; очистка экрана gotoxy(40,10); перемещение курсора в центр экрана return о; } ios& h1(ios& ii) манипулятор 111 { i1.setf(ios::dec ios::showpos); return ii; } ios& h2(ios& 12) манипулятор h2 { i2.setf(ios::hex ios::showbase); return 12; } void main(void) { int i=-l-l23; cout set scr hi i; Результат: +123 getchO; приостановка до нажатия любой клавиши cout set scr h2 i; Результат: Ox7b Здесь манипулятор set scr очищает экран и устанавливает курсор в его центр. Манипулятор Ы задает вывод чисел в десятичном формате со знаком + перед положительными числами. Манипулятор Ь2 задает вывод чисел в шестнадцатеричном формате с выводом системы счисления. 8.7. Функции классов ios, istream, ostream Из рис. 8.2 видно, что классы ios, istream, ostream являются базовыми практически для всех остальных классов. Поэтому рассмотрим некоторые, включенные в эти классы, полезные функции. class ios { public: int bad{); возвращает ненулевое значение при ошибке void clear(int=0); устанавливает состояние потока в заданное значение. Изменить состояние можно, например, так: cin.clear(ios::badbit); int eof(); возвращает ненулевое значение при достижении конца файла int failO; возвращает ненулевое значение при ошибке в текущей операции char fill(); возвращает текущий символ-заполнитель char fill(char); устанавливает новый символ-заполнитель и возвращает значение старого символа-заполнителя long flagsO; возвращает текущее значение признаков long flags(long); имеет аналогию с char fill(char); int good(); возвращает ненулевое значение при отсутствии ошибки int precisionO; возвращает значение точности вывода чисел с плавающей запятой int precision(int); имеет аналогию с char fill(char); streambuf* rdbufO; возвращает указатель на буфер ввода/вывода int rdstateO; возвращает текущее состояние потока long setf(long); рассматривалась выше long setf(long,long); рассматривалась выше ostream* tie(); возвращает связанный поток или NULL, если его нет. Связанными являются такие потоки, что если один из них используется, то может быть нарушено нормальное функционирование другого. Например, когда cin и cout являются связанными,то использование cin приводит к необходимости очистки {c6poca)cout (соответствующие пояснения приведены в работе [1, с.338]). ostream* tie(ostream *out); связывает новый поток out и возвращает ранее связанный выходной поток long unsetfO; очищает биты, соответствующие признакам, и возвращает значения старых признаков int widthO; возвращает текущее значение ширины поля int width(int); имеет аналогию с char fill(char); .....................}; class istream : public virtual ios { public: int gcountO; возвращает число символов, полученных при последней операции int getO; получает следующий символ istream ignore(int n=1,int delim=EOF); пропускает n символов во входном потоке; не выполняет эти действия, если встречается символ delim (здесь EOF - конец файла)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |