Бьерн Страуструп - Язык программирования С++. Главы 8-10 - Вывод встроенных типов
ОГЛАВЛЕНИЕ
Страница 42 из 65
10.2.1 Вывод встроенных типов
Для управления выводом встроенных типов определяется класс ostream с операцией << (вывести):class ostream : public virtual ios {Естественно, в классе ostream должен быть набор функций operator<<() для работы с беззнаковыми типами.
// ...
public:
ostream& operator<<(const char*); //строки
ostream& operator<<(char);
ostream& operator<<(short i)
{ return *this << int(i); }
ostream& operator<<(int);
ostream& operator<<(long);
ostream& operator<<(double);
ostream& operator<<(const void*); // указатели
// ...
};
Функция operator<< возвращает ссылку на класс ostream, из которого она вызывалась, чтобы к ней можно было применить еще раз operator<<. Так, если х типа int, то
cerr << "x = " << x;понимается как
(cerr.operator<<("x = ")).operator<<(x);В частности, это означает, что если несколько объектов выводятся с помощью одного оператора вывода, то они будут выдаваться в естественном порядке: слева - направо.
Функция ostream::operator<<(int) выводит целые значения, а функция ostream::operator<<(char) - символьные. Поэтому функция
void val(char c)печатает целые значения символов и с помощью программы
{
cout << "int('"<< c <<"') = " << int(c) << '\n';
}
main()будет напечатано
{
val('A');
val('Z');
}
int('A') = 65Здесь предполагается кодировка символов ASCII, на вашей машине может быть иной результат. Обратите внимание, что символьная константа имеет тип char, поэтому cout<<'Z' напечатает букву Z, а вовсе не целое 90.
int('Z') = 90
Функция ostream::operator<<(const void*) напечатает значение указателя в такой записи, которая более подходит для используемой системы адресации. Программа
main()выдаст на машине, используемой автором,
{
int i = 0;
int* p = new int(1);
cout << "local " << &i
<< ", free store " << p << '\n';
}
local 0x7fffead0, free store 0x500cДля других систем адресации могут быть иные соглашения об изображении значений указателей.
Обсуждение базового класса ios отложим до 10.4.1.