>
> } else {
> // нет ввода! Предупредить пользователя
> std::cerr << "No data?!" << std::endl;
> return -1; // свидетельство отказа
> }
> return 0;
>}
Это наиболее сложная программа из рассмотренных на настоящий момент, однако все ее элементы читателю уже знакомы.
Как обычно, код начинается с подключения используемых заголовков: >iostream
(из библиотеки) и >Sales_item.h
(собственного). В функции >main()
определен объект по имени >total
(для суммирования данных по текущему ISBN). Начнем с чтения первой транзакции в переменную >total
и проверки успешности чтения. Если чтение терпит неудачу, то никаких записей нет и управление переходит к наиболее удаленному оператору >else
, код которого отображает сообщение, предупреждающее пользователя об отсутствии данных.
Если запись введена успешно, управление переходит к блоку после наиболее удаленного оператора >if
. Этот блок начинается с определения объекта >trans
, предназначенного для хранения считываемых транзакций. Оператор >while
читает все остальные записи. Как и в прежних программах, условие цикла >while
читает значения со стандартного устройства ввода. В данном случае данные читаются в объект >trans
класса >Sales_item
. Пока чтение успешно, выполняется тело цикла >while
.
Тело цикла >while
представляет собой один оператор >if
, который проверяет равенство ISBN. Если они равны, используется составной оператор присвоения для суммирования объектов >trans
и >total
. Если ISBN не равны, отображается значение, хранящееся в переменной >total
, которой затем присваивается значение переменной >trans
. После выполнения кода оператора >if
управление возвращается к условию цикла >while
, читающему следующую транзакцию, и так далее, до тех пор, пока записи не исчерпаются. После выхода из цикла >while
переменная >total
содержит данные для последнего ISBN в файле. В последнем операторе блока наиболее удаленного оператора >if
отображаются данные последнего ISBN.
Упражнение 1.25. Используя загруженный с веб-сайта заголовок >Sales_item.h
, откомпилируйте и запустите программу для книжного магазина, представленную в этом разделе.
Резюме
Эта глава содержит достаточно информации о языке С++, чтобы позволить писать, компилировать и запускать простые программы. Здесь было описано, как определить функцию >main()
, которую вызывает операционная система при запуске программы. Также было продемонстрировано, как определить переменные, организовать ввод и вывод данных, использовать операторы >if
, >for
и >while
. Глава завершается описанием наиболее фундаментального элемента языка С++ — класса. Здесь было продемонстрировано создание и применение объектов классов, которые были созданы кем-то другим. Определение собственных классов будет описано в следующих главах.
Термины
Аргумент (argument). Значение, передаваемое функции.
Библиотечный тип (library type). Тип, определенный в стандартной библиотеке (например, >istream
).
Блок (block). Последовательность операторов, заключенных в фигурные скобки.
Буфер (buffer). Область памяти, используемая для хранения данных. Средства ввода (или вывода) зачастую хранят вводимые и выводимые данные в буфере, работа которого никак не зависит от действий программы. Буферы вывода могут быть сброшены явно, чтобы принудительно осуществить запись на диск. По умолчанию буфер объекта