Пока << применялась только для неформатированного вывода, и на самом деле в реальных программах она именно для этого главным образом и применяется. Помимо этого существует также несколько форматирующих функций, создающих представление своего параметра в виде строки, которая используется для вывода. Их второй (необязательный) параметр указывает, сколько символьных позиций должно использоваться.
char* oct(long, int =0); // восьмеричное представление char* dec(long, int =0); // десятичное представление char* hex(long, int =0); // шестнадцатиричное представление char* chr(int, int =0); // символ char* str(char*, int =0); // строкаЕсли не задано поле нулевой длины, то будет производиться усечение или дополнение; иначе будет использоваться столько символов (ровно), сколько нужно. Например:
cout << "dec(" << x << ") = oct(" << oct(x,6) << ") = hex(" << hex(x,4) << ")";Если x==15, то в результате получится:
dec(15) = oct(17) = hex(f);Можно также использовать строку в общем формате:
char* form(char* format...); cout<Виртуальная Функция Вывода
|
|
Иногда функция вывода должна быть virtual. Рассмотрим пример класса shape, который дает понятие фигуры (#1.18):
class shape { //... public: //... virtual void draw(ostream& s); // рисует "this" на "s" }; class circle: public shape { int radius; public: //... void draw(ostream&); };То есть, круг имеет все признаки фигуры и может обрабатываться как фигура, но имеет также и некоторые специальные свойства, которые должны учитываться при его обработке.
Чтобы поддерживать для таких классов стандартную парадигму вывода, операция << определяется так:
ostream& operator<<(ostream& s, shape* p) { p->draw(s); return s; }Если next - итератор типа определенного в #7.3.3, то список фигур распечатывается например так:
while (p = next()) cout << p;Файлы и Потоки
8.3.1 Инициализация Потоков Вывода | |
8.3.2 Закрытие Потоков Вывода | |
8.3.3 Открытие Файлов | |
8.3.4 Копирование Потоков |
Потоки обычно связаны с файлами. Библиотека потоков создает стандартный поток ввода cin, стандартный поток вывода cout и стандартный поток ошибок cerr. Программист может открывать другие файлы и создавать для них потоки.