×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 20 из 714 Настройки

. Затем создаются два объекта (>item1 и >item2) класса >Sales_item, предназначенные для хранения транзакций. В эти объекты читаются данные со стандартного устройства ввода. Выражение вывода суммирует их и отображает результат.

Обратите внимание: эта программа очень похожа на программу, приведенную в разд 1.2: она читает два элемента данных и отображает их сумму. Отличаются они лишь тем, что в первом случае суммируются два целых числа, а во втором — два объекта класса >Sales_item. Кроме того, сама концепция "суммы" здесь различна. В случае с типом >int получается обычная сумма — результат сложения двух числовых значений. В случае с объектами класса >Sales_item используется концептуально новое понятие суммы — результат сложения соответствующих компонентов двух объектов класса >Sales_item.

Использование перенаправления файлов

Неоднократный ввод этих транзакций при проверке программы может оказаться утомительным. Большинство операционных систем поддерживает перенаправление файлов, позволяющее ассоциировать именованный файл со стандартным устройством ввода и стандартным устройством вывода:

>$ addItems outfile

Здесь подразумевается, что >$ — это системное приглашение к вводу, а наша программа суммирования была откомпилирована в исполняемый файл >addItems.exe (или >addItems на системе UNIX). Эта команда будет читать транзакции из файла >infile и записывать ее вывод в файл >outfile в текущем каталоге.

Упражнения раздела 1.5.1

Упражнение 1.20. По адресу >http://www.informit.com/title/032174113 в каталоге кода первой главы содержится копия файла >Sales_item.h. Скопируйте этот файл в свой рабочий каталог и используйте при написании программы, которая читает набор транзакций проданных книг и отображает их на стандартном устройстве вывода.

Упражнение 1.21. Напишите программу, которая читает два объекта класса >Sales_item с одинаковыми ISBN и вычисляет их сумму.

Упражнение 1.22. Напишите программу, читающую несколько транзакций с одинаковым ISBN и отображающую сумму всех прочитанных транзакций.

1.5.2. Первый взгляд на функции-члены

Программа суммирования объектов класса >Sales_item должна проверять наличие у этих объектов одинаковых ISBN. Сделаем это так:

>#include

>#include "Sales_item.h"

>int main() {

> Sales_item item1, item2;

> std::cin >> item1 >> item2;

> // сначала проверить, представляют ли объекты item1 и item2

> // одну и ту же книгу

> if (item1.isbn() == item2.isbn()) {

>  std::cout << item1 + item2 << std::endl;

>  return 0; // свидетельство успеха

> } else {

>  std::cerr << "Data must refer to same ISBN"

>            << std::endl;

>  return -1; // свидетельство отказа

> }

>}

Различие между этой программой и предыдущей версией в операторе >if и его ветви >else. Даже не понимая смысла условия оператора >if, вполне можно понять, что делает эта программа. Если условие истинно, вывод будет, как прежде, и возвратится значение >0, означающее успех. Если условие ложно, выполняется блок ветви >else, который выводит сообщение об ошибке и возвращает значение >-1.

Что такое функция-член?

Условие оператора >if