10.2.1 Вывод встроенных типов.

   


Назад  |  Вперёд

Для управления выводом встроенных типов определяется класс ostream с операцией << (вывести):

           class ostream : public virtual ios {
               // ...
           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*);    // указатели
               // ...
           };

Естественно, в классе ostream должен быть набор функций operator<<() для работы с беззнаковыми типами.

Функция 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
           int('Z') = 90

Здесь предполагается кодировка символов ASCII, на вашей машине может быть иной результат. Обратите внимание, что символьная константа имеет тип char, поэтому cout<<'Z' напечатает букву 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.


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.