Следующий оператор читает введенные пользователем данные:
>std::cin >> v1 >> v2;
Оператор ввода (input operator) (т.е. оператор >>>
) ведет себя аналогично оператору вывода. Его левым операндом является объект типа >istream
, а правым операндом — объект, заполняемый данными. Он читает значение из потока, представляемого объектом типа >istream
, и сохраняет его в объекте, заданном правым операндом. Подобно оператору вывода, оператор ввода возвращает в качестве результата свой левый операнд. Другими словами, эта операция эквивалентна следующей:
>(std::cin >> v1) >> v2;
Поскольку оператор возвращает свой левый операнд, мы можем объединить в одном операторе последовательность из нескольких запросов на ввод данных. Наше выражение ввода читает из объекта >std::cin
два значения, сохраняя первое в переменной >v1
, а второе в переменной >v2
. Другими словами, рассматриваемое выражение ввода выполняется как два следующих:
>std::cin >> v1;
>std::cin >> v2;
Теперь осталось лишь вывести результат сложения на экран.
>std::cout << "The sum of " << v1 << " and " << v2
> << " is " << v1 + v2 << std::endl;
Хоть этот оператор и значительно длиннее оператора, отобразившего приглашение к вводу, принципиально он ничем не отличается. Он передает значения каждого из своих операндов в поток стандартного устройства вывода. Здесь интересен тот факт, что не все операнды имеют одинаковый тип значений. Некоторые из них являются строковыми литералами, например >"The sum of "
, другие значения относятся к типу >int
, например >v1
и >v2
, а третьи представляют собой результат вычисления арифметического выражения >v1 + v2
. В библиотеке определены версии операторов ввода и вывода для всех этих встроенных типов данных.
Упражнение 1.3. Напишите программу, которая выводит на стандартное устройство вывода фразу >"Hello, World"
.
Упражнение 1.4. Наша программа использовала оператор суммы (>+
) для сложения двух чисел. Напишите программу, которая использует оператор умножения (>*
) для вычисления произведения двух чисел.
Упражнение 1.5. В нашей программе весь вывод осуществлял один большой оператор. Перепишите программу так, чтобы для вывода на экран каждого операнда использовался отдельный оператор.
Упражнение 1.6. Объясните, является ли следующий фрагмент кода допустимым:
>std::cout << "The sum of " << v1;
> << " and " << v2;
> << " is " << v1 + v2 << std::endl;
Если программа корректна, то что она делает? Если нет, то почему и как ее исправить?
1.3. Несколько слов о комментариях
Прежде чем перейти к более сложным программам, рассмотрим комментарии языка С++. Комментарий (comment) помогает человеку, читающему исходный текст программы, понять ее смысл. Как правило, они используются для кратких заметок об используемом алгоритме, о назначении переменных или для дополнительных разъяснений сложного фрагмента кода. Поскольку компилятор игнорирует комментарии, они никак не влияют ни на размер исполняемой программы, ни на ее поведение или производительность.
Хотя компилятор игнорирует комментарии, читатели нашего кода — напротив. Программисты, как правило, доверяют комментариям, даже когда другие части системной документации считают устаревшими. Некорректный комментарий — это еще хуже, чем отсутствие комментария вообще, поскольку он может ввести читателя в заблуждение. Когда вы модифицируете свой код, убедитесь, что обновили и комментарии!