Программирование >>  Программирование на языке c++ 

1 ... 106 107 108 [ 109 ] 110 111 112 ... 159


Рассмотрим выражение 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 - конец файла)



1 ... 106 107 108 [ 109 ] 110 111 112 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика