Бьерн Страуструп - Язык программирования С++. Главы 9-10
Страница 22. Вывод встроенных типов



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.

 
« Предыдущая статья   Следующая статья »