Язык С++ для системного программирования. Имена-этикетки. Класс как область действия, страница 18

cout<<"Введите а,в,с" <<'\n';

cin>>а>>в>>с;

cout<<"Вы ввели: а="<<a<<" в="<<в<<" c="<<c<<'\n';

В этом фрагменте программы приведены сцепленные операции ввода и вывода.

В следующей программе приведены примеры перегруженных операций для встроенных типов.

#include <iostream.h>

#include <iomanip.h>

void main(0

 {

int k;

cout<<"Введите k=" <<'\n';

cin>>k;

long m;

cout<<"Введите m=" <<'\n';

cin>>m;

floatx;

cout<<"Введите x=" <<'\n';

cin>>x;

double y;

cout<<"Введите y=" <<'\n';

cin>>y;

char nch;

cout<<"Введите символ nch =" <<endl;/*endl - т.н. манипулятор. Он помещает в поток символ новой строки (\n) и вызывает манипулятор flush, который принудительно записывает все данные на соответствующие физические устройства. Поэтому endl рекомендуется ставить перед вводом

символа и строки */

cin >> nch;

char name [15];

cout<<"Введите name =" <<endl;

cin >> name;

cout<<"Вы ввели: k="<<k<<" m="<<m<<" x="<<x<<y="<<y<< nch="<<nch<< name ="<< name<<'\n';

}

23.5 Расширение потоков для типов, определяемых пользователем

Можно легко расширить библиотеку, чтобы приспособить операции помещения/извлечения к собственным типам данных. Для этого следует определить две функции со следующими заголовками:

// Чтение данных из потока

istream& operator >> ( istream &is, имя_типа &имя_перем.);

// Запись данных в поток

оstream& operator << ( ostream &os, имя_типа &имя_перем.);

При использовании классов следует операции извлечения и помещения объявлять друзьями данного класса. Это обеспечивает операции доступа к элементам данных.

Пример расширения потоков для объектов class dog.

#include <iostream.h>

#include <iomanip.h>

class dog

 {

char*poroda;

char*name;

int nomer;

friend istream &operator>>( istream &is, dog &x.);

friend оstream &operator<<( ostream &os, dog &x.);

 };

istream &operator>>( istream &is, dog &x.);

 {

poroda=new char[15];

name=new char[10];

cout<<"Введите породу" <<endl;

is>>x.poroda;

cout<<"Введите имя" <<endl;

is>>x.name;

cout<<"Введите номер" <<'\n';

is>>x.nomer;

return is;//Обязательно!

 }

оstream&operator<<(ostream&os, dog &x.);

 {

os<<"Порода-"<<x.poroda<<" Имя-"<<x. name<<" Номер-"<<x.nomer<<'\n';

return os;//Обязательно!

 }

void main()

 (

dog q;

cin>>q;

cout<<q;

}

Описан объект q класса dog. При его вводе вызывается дружественная функция operator>>(). В этой функции вместо формальных параметров (ссылок) x и is будут соответственно q и cin. Результат работы функции через returnis присваивается предопределенному объекту класса istreamcin. Аналогично выполняется дружественная функция operator<<().

24.1 Файловый ввод/вывод с применением потоков С++

Библиотека С++ содержит три специализированные класса для файлового ввода/вывода. Это следующие классы: