- •( Stream – поток, I - input , o – output)
- •Иерархия потоковых классов (одна ветвь)
- •Стандартные потоки ввода – вывода
- •1) Для целых чисел, 2) для вещественных чисел и 3) для строк
- •Компонентные функции класса ios для форматирования
- •Манипуляторы с параметрами ( определены в файле iomanip.H )
- •Ввод-вывод для типов, определенных пользователем
- •Функции чтения
- •Работа с файлами
- •Ввод-вывод нижнего уровня
- •Текстовой и бинарный файлы
- •Открытие и закрытие файлов
- •Чтение и запись данных
- •Int fd ; // дескриптор файла
Манипуляторы с параметрами ( определены в файле iomanip.H )
setbase ( int n) - устанавливает основание системы счисления
cout << setbase (8) << 255 <<setbase (16) << 255 377 ff
resetiosflags (long L) -сбрасывает отдельные флаги
setiosflags (long L) - устанавливает отдельные флаги
cout<<setw(5)<< setiosflags( ios::left)<<5<<»\n»<<setw(5)<<
resetiosflags( ios::left) <<5; 5
5
setfill( int n) - значение параметра – код заполнителя
for (int i=0; i<3; i++) cout <<setfill(46)<<setw(5+i)<<i+1<<»\n»;
….1
…..2
……3
setprecision( int n) -определяет точность представления числа при вводе –
вывода вещественного числа , количество цифр
дробной части
for(int i =0 ; i< 4; i++) cout<<setprecicion(i)<<1.2345<<»\n» 1.2345
1.2
1.23
1.234
setw( int n) - параметр задает поле вывода
При использовании манипулятора setw как и член – функции width необходимо указывать требуемую ширину отдельно для каждого выводимого значения.
cout << setiosflags(ios::scientific)<< 0.000123; 1.23e-04
cout << setiosflags(ios::fixed)<< 0.000123; 0.000123
Ввод-вывод для типов, определенных пользователем
Необходимо расширить действие операций >>и << на данные производного типа.
Это делается с помощью операций – функций ( перегрузка операций). Первый параметр операции - функции ссылка на объект класса (поток). Второй параметр - ссылка на объект желаемого типа для ввода или сам желаемый тип для вывода.
Тип возвращаемого результата – ссылка на объект класса, т. е. на поток
Пример Вывод структуры
#include <iostream.h>
struct st // объявлена структура
{char* name ; long sh, cen ;}zap1 ={ « ножницы», 1756 , 43};
st A [5];
// перегрузка операции включения в поток:
ostream& operator << (ostream& out , st& zap) //операция- функция для
//вывода структуры на экран
{ out << «\n»<<zap.name<<» » << zap.sh<<» « << zap.cen
return out ; }
/*Эквивалентно было написать:
{ return cout << «\n»<<zap.name<<» » << zap.sh<<» « << zap.cen;} */
// Перегрузка операции извлечения из потока:
istream& operator >> ( istream& in , st & zap) //операция функция для ввода
// с клавиатуры структуры
{ in >> zap.name >> zap. sh >> zap.cen; return in ;}
// вводятся три значения через <enter
/* Или эквивалентно:
{ return in >> zap.name >> zap. sh >> zap.cen;} */
… void main()
{ … for(int I=0; I<5; I++) {cin>> A[I]; cout<< A[I];}
cout<<zap1<<A[0];…
В связи с тем , что операции-функции возвращают ссылку на поток , их можно использовать в цепочке вводов или выводов.
Функции для обмена с потоком
Кроме операций включения >> в поток и извлечения <<из потока имеются альтернативные компонентные функции ввода – вывода.
Функции вывода
В классе выходного потока определены две функции для двоичного вывода данных в стандартный поток:
ostream & ostream::put(char c);
ostream & ostream::write ( const signed char * array, int n);
ostream & ostream::write ( const unsigned char * array, int n);
Функция put (‘ ‘) помещает в выходной поток (объект для которого она вызвана ) символ – параметр:
cout .put(‘ X’) ( аналогично cout<<’X’; )
Первый параметр функции write - указатель array на символьный массив на участок оперативной памяти из которого извлекаются побайтно данные для вывода в поток, параметр n определяет количество выводимых байт.
Флаги форматирования и компонентные функции для форматирования не применимы к функциям put и write. Т.е. в отличии от операции включения в поток << эти функции не обеспечивают форматного вывода, напр., символ выводится всегда в одну позицию потока.
Функции put и write возвращают указатель на объект (поток) , поэтому из них также можно составлять цепочки вывода
char mas[] =”Миру-мир”;
int r = sizeof ( mas) -1;
cout.put(‘\n’) . write (mas , r). put(‘!’) . put(‘\n’);
//Миру-мир!