В большинстве примеров этой книги использована iostream
. Ее основу составляют два типа, istream
и ostream
, которые представляют потоки ввода и вывода соответственно.
В библиотеке определены четыре объекта ввода-вывода. Для осуществления ввода используется объект cin
(произносится "си-ин") типа istream
. Этот объект упоминают также как cout
(произносится "си-аут") типа ostream
. Его зачастую упоминают как ostream
— это cerr
и clog
(произносится "си-ерр" и "си-лог" соответственно). Объект cerr
, называемый также clog
— для создания информационных сообщений.
Как правило, операционная система ассоциирует каждый из этих объектов с окном, в котором выполняется программа. Так, при получении данных объектом cin
они считываются из того окна, в котором выполняется программа. Аналогично при выводе данных объектами cout
, cerr
или clog
они отображаются в том же окне.
Приложению для книжного магазина потребуется объединить несколько записей, чтобы вычислить общую сумму. Сначала рассмотрим более простую, но схожую задачу — сложение двух чисел. Используя библиотеку ввода-вывода, можно модифицировать прежнюю программу так, чтобы она запрашивала у пользователя два числа, а затем вычисляла и выводила их сумму.
#include
int main() {
std::cout << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The sum of " << v1 << " and " << v2
<< " is " << v1 + v2 << std::endl;
return 0;
}
Вначале программа отображает на экране приглашение пользователю ввести два числа.
Enter two numbers:
Затем она ожидает ввода. Предположим, пользователь ввел следующие два числа и нажал клавишу
3 7
В результате программа отобразит следующее сообщение:
The sum of 3 and 7 is 10
Первая строка кода (#include
) — это ostream
. Имя в угловых скобок — это #include
должна быть написана в одной строке. То есть и заголовок, и слово #include
должны находиться в той же строке кода. Директива #include
должна располагаться вне тела функции. Как правило, все директивы #include
программы располагают в начале файла исходного кода.
Первый оператор в теле функции main()
выполняет <<
.
std::cout << "Enter two numbers:" << std::endl;
Оператор <<
получает два операнда: левый операнд должен быть объектом класса ostream
, а правый операнд — это подлежащее отображению значение. Оператор заносит переданное значение в объект cout
класса ostream
. Таким образом, результатом является объект класса ostream
, в который записано предоставленное значение.
Выражение вывода использует оператор <<
дважды. Поскольку оператор возвращает свой левый операнд, результат первого оператора становится левым операндом второго. В результате мы можем сцепить вместе запросы на вывод. Таким образом, наше выражение эквивалентно следующему:
(std::cout << "Enter two numbers:") << std::endl;
У каждого оператора в цепи левый операнд будет тем же объектом, в данном случае std::cout
. Альтернативно мы могли бы получить тот же вывод, используя два оператора:
std::cout << "Enter two numbers:";
std::cout << std::endl;