Программирование на С++. Рейзлин В.И. - 71 стр.

UptoLike

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

73
Манипуляторы
Несмотря на гибкость и большие возможности управления формата-
ми с помощью компонентных функций класса ios, их применение доста-
точно громоздко. Более простой способ изменения параметров и флагов
форматирования обеспечивают манипуляторы.
Манипуляторами называются специальные функции, позволяющие
модифицировать работу потока. Особенность манипуляторов состоит в
том, что их можно использовать в качестве правого операнда операции >>
или <<. В качестве левого операнда, как обычно, используется поток
(ссылка на поток), и именно на этот поток воздействует манипулятор.
Для обеспечения работы с манипуляторами в классах istream и
ostream имеются следующие перегруженные функции operator.
istream& operator>>(istream&(*_f)( istream&));
ostream& operator<<(ostream&(*_f)(ostream&));
При использовании манипуляторов следует включить заголовочный
файл <iomanip.h>, в котором определены встроенные манипуляторы.
Определение пользовательских манипуляторов
Порядок создания пользовательского манипулятора с параметрами,
например для вывода, следующий:
1. Определить класс (my_manip) с полями: параметры манипулятора,
указатель на функцию типа
ostream& (*f)(ostream&,<параметры манипулятора>);
2. Определить конструктор этого класса (my_manip) с инициализа-
цией полей.
3. Определить, в этом классе дружественную функцию operator<<.
Эта функция в качестве правого аргумента принимает объект класса
my_manip, левого аргумента (операнда) поток ostream и возвращает поток
ostream как результат выполнения функции *f. Например,
typedef far ostream&(far *PTF)(ostream&,int,int,char);
class my_man{
int w;int n;char fill;
PTF f;
public:
//конструктор
my_man(PTF F,int W,int N,char FILL):f(F),w(W),n(N),fill(FILL){}
friend ostream& operator<<(ostream&,my_man);
};
ostream& operator<<(ostream& out,my_man my)
{return my.f(out,my.w,my.n,my.fill);}