В библиотеке определены четыре объекта ввода-вывода. Для осуществления ввода используется объект cin
(произносится "си-ин") типа istream
. Этот объект упоминают также как стандартный ввод (standard input). Для вывода используется объект cout
(произносится "си-аут") типа ostream
. Его зачастую упоминают как стандартный вывод (standard output). В библиотеке определены еще два объекта типа ostream
— это cerr
и clog
(произносится "си-ерр" и "си-лог" соответственно). Объект cerr
, называемый также стандартной ошибкой (standard error), как правило, используется в программах для создания предупреждений и сообщений об ошибках, а объект clog
— для создания информационных сообщений.
Как правило, операционная система ассоциирует каждый из этих объектов с окном, в котором выполняется программа. Так, при получении данных объектом cin
они считываются из того окна, в котором выполняется программа. Аналогично при выводе данных объектами cout
, cerr
или clog
они отображаются в том же окне.
Приложению для книжного магазина потребуется объединить несколько записей, чтобы вычислить общую сумму. Сначала рассмотрим более простую, но схожую задачу — сложение двух чисел. Используя библиотеку ввода-вывода, можно модифицировать прежнюю программу так, чтобы она запрашивала у пользователя два числа, а затем вычисляла и выводила их сумму.
#include <iostream>
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:
Затем она ожидает ввода. Предположим, пользователь ввел следующие два числа и нажал клавишу <Enter>:
3 7
В результате программа отобразит следующее сообщение:
The sum of 3 and 7 is 10
Первая строка кода (#include <iostream>
) — это директива препроцессора (preprocessor directive), которая указывает компилятору[1] на необходимость включить в программу библиотеку ostream
. Имя в угловых скобок — это заголовок (header). Каждая программа, которая использует средства, хранимые в библиотеке, должна подключить соответствующий заголовок. Директива #include
должна быть написана в одной строке. То есть и заголовок, и слово #include
должны находиться в той же строке кода. Директива #include
должна располагаться вне тела функции. Как правило, все директивы #include
программы располагают в начале файла исходного кода.
Первый оператор в теле функции main()
выполняет выражение (expression). В языке С++ выражение состоит из одного или нескольких операндов (operand) и, как правило, оператора (operator). Чтобы отобразить подсказку на стандартном устройстве вывода, в этом выражении используется оператор вывода (output operator), или оператор <<
.
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;
Первый оператор выводит сообщение для пользователя. Это сообщение, строковый литерал (string literal), является последовательностью символов, заключенных в парные кавычки. Текст в кавычках выводится на стандартное устройство вывода.
1
На самом деле препроцессору. Компилятор получит готовый промежуточный файл, в состав которого войдет содержимое подключенной библиотеки. —