Глава 6. Базовые типы данных и операции ________749

же функцию, что и символ \п в программах на С. И endl, и \п (новая строка) посылают на вывод комбинацию возврат каретки — перевод строки.

Хотите верьте, хотите — нет, но endl — это функция. Сила и выразительность языка C++ позволяют весьма функционально сложные понятия представлять в самой простой форме.

Сами объекты cin и cout для ввода и вывода использовали функции printf и scanf, которые из-за своих списков аргументов неопределенной длины работают достаточно медленно. Разумеется, если медленную функцию, вроде printf, использовать для создания другой, то в результате получится функция еще более медленная. И действительно, поначалу ввод/вывод через cin и cout происходил с удручающей скоростью. Теперь cin и cout более не используют printf и scanf и работают гораздо эффективнее.

Операции потокового ввода-вывода

При обсуждении потокового ввода-вывода мы ссылались на операции « и ». Помимо вывода на консоль и ввода с клавиатуры данных базовых типов эти операции совершенно идентичным образом могут быть применены для файлового ввода-вывода (обратитесь к главе 13 "Обзор потоков ввода-вывода").

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

Как это все достигнуто? Вы увидите впоследствии, что за первенство здесь боролись несколько прогрессивных идейных течений. Пока что пользуйтесь cin и cout для чтения и записи базовых типов. Осваивая эту книгу, вы увидите связь между другими аспектами потоков ввода-вывода и такими концепциями, как:

• Преобразование имен, оно рассматривается в главе 15 "Перегрузка функций".

• Перегрузка операций и функций — смотрите главы 15 "Перегрузка функций" и 16 "Перегрузка операций".

• Манипуляторы потоков — также обсуждаются в главе 16 "Перегрузка операций" (автор продолжает настаивать на главе 16, хотя нам кажется, что речь идет о главе 13, — прим. перев.).

Пример программы

Перед вами небольшой пример, демонстрирующий простоту использования объектов ввода-вывода. Помните, что cin и cout — это объекты классов istream и ostream соответственно, cin и cout представляют собой глобаль-