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

вызывает функцию-член (member function) >isbn().

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

Функция-член — это функция, определенная в составе класса. Функции-члены называют также методами (method) класса.

Вызов функции-члена обычно происходит от имени объекта класса. Например, первый, левый, операнд оператора равенства использует оператор точка (dot operator) (оператор>.) для указания на то, что имеется в виду "член >isbn() объекта по имени >item1".

>item1.isbn

Точечный оператор применим только к объектам типа класса. Левый операнд должен быть объектом типа класса, а правый операнд — именем члена этого класса. Результатом точечного оператора является член класса, заданный правым операндом.

Точечный оператор обычно используется для доступа к функциям-членам при их вызове. Для вызова функции используется оператор вызова (call operator) (оператор>()). Оператор обращения — это пара круглых скобок, заключающих список аргументов (argument), который может быть пуст. Функция- член >isbn() не получает аргументов.

>item1.isbn()

Таким образом, это вызов функции >isbn(), являющейся членом объекта >item1 класса >Sales_item. Эта функция возвращает ISBN, хранящийся в объекте >item1.

Правый операнд оператора равенства выполняется тем же способом: он возвращает ISBN, хранящийся в объекте >item2. Если ISBN совпадают, условие истинно, а в противном случае оно ложно.

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

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

Упражнение 1.24. Проверьте предыдущую программу, введя несколько транзакций, представляющих несколько ISBN. Записи для каждого ISBN должны быть сгруппированы.

1.6. Программа для книжного магазина

Теперь все готово для решения проблемы книжного магазина: следует прочитать файл транзакций и создать отчет, где для каждой книги будет подсчитана общая выручка, средняя цена и количество проданных экземпляров. При этом подразумевается, что все транзакции для каждого ISBN вводятся группами.

Программа объединяет данные по каждому ISBN в переменной >total (всего). Каждая прочитанная транзакция будем сохранена во второй переменной, >trans. В противном случае значение объекта >total выводится на экран, а затем заменяется только что считанной транзакцией.

>#include

>#include "Sales_item.h"

>int main() {

> Sales_item total; // переменная для хранения данных следующей

>                   // транзакции

> // прочитать первую транзакцию и удостовериться в наличии данных

> // для обработки

> if (std::cin >> total) {

>  Sales_item trans; // переменная для хранения текущей транзакции

>  // читать и обработать остальные транзакции

>  while (std::cin >> trans) {

>   // если все еще обрабатывается та же книга

>   if (total.isbn() == trans.isbn())

>    total += trans; // пополнение текущей суммы

>   else {

>    // отобразить результаты по предыдущей книге

>    std::cout << total << std::endl;

>    total = trans; // теперь total относится к следующей

>                   // книге

>   }

>  }

>  std::cout << total << std::endl; // отобразить последнюю запись