    Окончание табл. 15.2 

    Манипулятор	Действие 

    oct	Преобразовать в восьмеричную систему счисления 
    resetiosflagsGong f)	Очистить биты форматирования, заданные в / 
    setbase(int n)	Установить систему счисления с основанием n (0, 8, 10 или	16) 
    setiosflagsdong f)	Установить биты форматирования, заданные в f 
    setfilKint c)	Использовать символ с для заполнения при выравнивании 
    setprecisionGnt n)	Установить точность вывода значений с плавающей точкой 
                                     равной п 
    setw(int n)	Установить ширину поля п 
    unlockGos &ir)	Разблокировать дескриптор файла для ссылки ir потоков 
                                    ввода-выво
    ws	Извлечь пробельные символы 

    Манипуляторы-функции потоков вывода возвращают значения типа ostream&, 
другими словами, ссылки па объект ostream. Вы можете написать свои собственные 
манипуляторы, включив заголовочный файл IOSTREAM.H и определив функцию типа 
&ostream. Например, вы можете определить манипулятор звонка для потока вывода 
следующим образом: 

    ostream& bell(ostream& os) { 
    return os « "\a";	// '\a' - управляющий код звонка 
    } 

    Функция bell() имеет тип &ostream, и в ней объявлен параметр os типа 
ostream&. Это позволит использовать функцию в каскадном операторе вывода в поток: 

    cout « bell « "Ding!"; 

    Можно также вызвать функцию-член потокового объекта для задания 
выравнивания. Например, для вывода значения целочисленной переменной v с 
выравниванием по правому краю в восьми позициях вы чожете написать: 

    cout.width(8); 
    cout « v « '\n';       // Отобразить v в восьми позициях 
    cout « v « '\n';       // Отобразить v с выравниванием по умолчанию 

    Модификатор width недолговечен, он оказывает влияние только на следующее 
выводимое значение. Другие функции-члены используют функцию fill(charc), 
устанавливающую символ заполнения при выравнивании с помощью символьного 
параметра с, и precision(шnt n), устанавливающую точность вывода значений с 
плавающей точкой равной n. 

    Перегрузка оператора вывода в поток 

    Обычно потоки вывода могут поддерживать лишь базовые типы данных, подобные 
int, long, double, char* и т.д. С помощью перегрузки оператора вывода в поток «, вы можете 
заставить выражения, в которых используются эти операторы, выводить объекты 
ваших собственных классов. 
    В листинге 15.8 объявляется потоковый класс с именем TPoint и двумя 
целочисленными переменными х и у, запоминающими координаты, вероятно, на 
графическом дисплее. В программе перегружается оператор вывода в 
поток, так что можно использовать объекты класса TPoint в этих операторах, 
как показано в строках 20 и 23. 

    Листинг 15.8.  POINTOUT.CPP (классы и операторы вывода) 

    1:           #include <iostream.h> 
    2:
    3:	class TPoint { 
    A:	private: 
    5:	   int x,  y; 
    6:	public: 
    7:	  TPoint() { x = у = 0;   } 
    8:	  TPoint( int xx, int yy ) { x = xx; у = yy; }


    15. Передовые средства C++     387 
