В этом разделе описан простой класс, который можно использовать при решении проблемы книжного магазина. Реализован этот класс будет в следующих главах, когда читатель больше узнает о типах, выражениях, операторах и функциях.
Чтобы использовать класс, необходимо знать следующее.
1. Каково его имя?
2. Где он определен?
3. Что он делает?
Предположим, что класс для решения проблемы книжного магазина имеет имя Sales_item
, а определен он в заголовке Sales_item.h
.
Как уже было продемонстрировано на примере использования таких библиотечных средств, как объекты ввода и вывода, в код необходимо включить соответствующий заголовок. Точно так же заголовки используются для доступа к классам, определенным для наших собственных приложений. Традиционно имена файлов заголовка совпадают с именами определенных в них классов. У написанных нами файлов заголовка, как правило, будет суффикс .h
, но некоторые программисты используют расширение .H
, .hpp
или .hxx
. У заголовков стандартной библиотеки обычно нет никакого суффикса вообще. Компиляторы, как правило, не заботятся о форме имен файлов заголовка, но интегрированные среды разработки иногда это делают.
1.5.1. Класс Sales_item
Класс Sales_item
предназначен для хранения ISBN, а также для отслеживания количества проданных экземпляров, полученной суммы и средней цены проданных книг. Не будем пока рассматривать, как эти данные сохраняются и вычисляются. Чтобы применить класс, необходимо знать, что он делает, а не как.
Каждый класс является определением типа. Имя типа совпадает с именем класса. Следовательно, класс Sales_item
определен как тип Sales_item
. Подобно встроенным типам данных, вполне можно создать переменную типа класса. Рассмотрим пример.
Sales_item item;
Этот код создает объект item
типа Sales_item
. Как правило, об этом говорят так: создан "объект типа Sales_item
", или "объект класса Sales_item
", или даже "экземпляр класса Sales_item
".
Кроме создания переменных типа Sales_item
, с его объектами можно выполнять следующие операции.
• Вызывать функцию isbn()
, чтобы извлечь ISBN из объекта класса Sales_item
.
• Использовать операторы ввода (>>
) и вывода (<<
), чтобы читать и отображать объекты класса Sales_item
.
• Использовать оператор присвоения (=
), чтобы присвоить один объект класса Sales_item
другому.
• Использовать оператор суммы (+
), чтобы сложить два объекта класса Sales_item
. ISBN этих двух объектов должен совпадать. Результатом будет новый объект Sales_item
с тем же ISBN, а количество проданных экземпляров и суммарный доход будут суммой соответствующих значений его операндов.
• Использовать составной оператор присвоения (+=
), чтобы добавить один объект класса Sales_item
к другому.
Читая эти программы, очень важно иметь в виду, что все действия, которые могут быть осуществлены с объектами класса Sales_item
, определяет его автор. Таким образом, класс Sales_item
определяет то, что происходит при создании объекта класса Sales_item
, а также то, что происходит при его присвоении, сложении или выполнении операторов ввода и вывода.
Автор класса вообще определяет все операции, применимые к объектам типа класса. На настоящий момент с объектами класса Sales_item
можно выполнять только те операции, которые перечислены в этом разделе.
Sales_item
Теперь, когда известны операции, которые можно осуществлять, используя объекты класса Sales_item
, можно написать несколько простых программ, использующих его. Программа, приведенная ниже, читает данные со стандартного устройства ввода в объект Sales_item
, а затем отображает его на стандартном устройстве вывода.
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item book;
// прочитать ISBN, количество проданных экземпляров и цену
std::cin >> book;
// вывести ISBN, количество проданных экземпляров,
// общую сумму и среднюю цену