Язык С++ и программирование на нем. Рейзлин В.И. - 164 стр.

UptoLike

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

166
Так как имеются перегруженные версии операции сдвига
operator<<(), правая операция всегда будет выполнена. Функция cout<<i
вызывает operator<<(int), a cout<<name вызывает operator<<(const char*).
Следовательно, использование стандартных потоков является безопас-
ным по типам данных.
Расширяемость для новых типов. Другим преимуществом стан-
дартных потоков С++ является то, что определенные пользователем ти-
пы данных могут быть без труда в них встроены. Рассмотрим класс
Data, данные которого необходимо печатать:
struct Data {
int x; char* y;};
Все, что нужно сделать, это перегрузить операцию << для нового
типа Data. Соответствующая функция operator<<() может быть реализо-
вана так:
ostream &operator<<(ostream & out, const Data & р){
return out << p.x << ‘ ‘ << p.у;
}
После этого станет возможно осуществлять вывод:
#include <iostream.h>
struct Data {int x; char* y;
Data (int x, char* y){this->x = x; this->y = y;}
};
ostream &operator<<(ostream & out, const Data & p){
return out << p.x <<‘ ‘<< p.y;
}
void main(){
Data p(1, “Error“);
cout << p<<’\n’;
}
27.3. Операции помещения и извлечения из потока
В ывод в по т о к выполняется с помощью операции вставки (в
поток), которая является перегруженной операцией сдвига влево <<.
Левым ее операндом является объект потока вывода. Правым операн-
дом может являться любая переменная, для которой определен вывод в
поток (то есть переменная любого встроенного типа или любого опре-