Объектно-ориентированное программирование на языке С++. Ноткин А.М. - 73 стр.

UptoLike

Составители: 

74
4. Определить функцию типа *f (fmanip), принимающую поток и па-
раметры манипулятора и возвращающую поток. Эта функция собственно
и выполняет форматирование. Например,
ostream& fmanip(ostream& s,int w,int n,char fill)
{s.width(w);
s.flags(ios::fixed);
s.precision(n);
s.fill(fill);
return s;}
5. Определить собственно манипулятор (wp) как функцию, прини-
мающую параметры манипулятора и возвращающую объект my_manip,
поле f которого содержит указатель на функцию fmanip. Например,
my_man wp(int w,int n,char fill)
{return my_man(fmanip,w,n,fill);}
Для создания пользовательских манипуляторов с параметрами мож-
но использовать
макросы, которые содержатся в файле <iomanip.h>:
OMANIP(int)
IMANIP(int)
IOMANIP(int)
Состояние потока.
Каждый поток имеет связанное с ним состояние. Состояния потока
описываются в классе ios в виде перечисления enum.
public:
enum io_state{
goodbit, //нет ошибки 0Х00
eofbit,//конец файла 0Х01
failbit,//последняя операция не выполнилась 0Х02
badbit,//попытка использования недопустимой операции 0Х04
hardfail //фатальная ошибка 0Х08
};
Флаги, определяющие результат последней
операции с объектом ios,
содержатся в переменной state. Получить значение этой переменной можно
с помощью функции int rdstate().
Кроме того, проверить состояние потока можно следующими функ-
циями:
int bad(); 1, если badbit или hardfail
int eof(); 1, если eofbit
int fail(); 1, если failbit, badbit или hardfail
int good(); 1, если goodbit
                                  74

      4. Определить функцию типа *f (fmanip), принимающую поток и па-
раметры манипулятора и возвращающую поток. Эта функция собственно
и выполняет форматирование. Например,
      ostream& fmanip(ostream& s,int w,int n,char fill)
      {s.width(w);
      s.flags(ios::fixed);
      s.precision(n);
      s.fill(fill);
      return s;}
      5. Определить собственно манипулятор (wp) как функцию, прини-
мающую параметры манипулятора и возвращающую объект my_manip,
поле f которого содержит указатель на функцию fmanip. Например,
      my_man wp(int w,int n,char fill)
      {return my_man(fmanip,w,n,fill);}
      Для создания пользовательских манипуляторов с параметрами мож-
но использовать макросы, которые содержатся в файле :
      OMANIP(int)
      IMANIP(int)
      IOMANIP(int)

     Состояние потока.
     Каждый поток имеет связанное с ним состояние. Состояния потока
описываются в классе ios в виде перечисления enum.
     public:
     enum io_state{
     goodbit, //нет ошибки 0Х00
     eofbit,//конец файла 0Х01
     failbit,//последняя операция не выполнилась 0Х02
     badbit,//попытка использования недопустимой операции 0Х04
     hardfail//фатальная ошибка 0Х08
     };
     Флаги, определяющие результат последней операции с объектом ios,
содержатся в переменной state. Получить значение этой переменной можно
с помощью функции int rdstate().
     Кроме того, проверить состояние потока можно следующими функ-
циями:
     int bad();        1, если badbit или hardfail
     int eof();        1, если eofbit
     int fail();       1, если failbit, badbit или hardfail
     int good();       1, если goodbit