В теле класса определены члены (member) класса. У нашего класса есть только переменные-члены (data member). Переменные-члены класса определяют содержимое объектов этого класса. Каждый объект обладает собственным экземпляром переменных-членов класса. Изменение переменных-членов одного объекта не изменяет данные в любом другом объекте класса >Sales_data
.
Переменные-члены определяют точно так же, как и обычные переменные: указывается базовый тип, затем список из одного или нескольких операторов объявления. У нашего класса будут три переменные-члены: член типа >string
по имени >bookNo
, член типа >unsigned
по имени >units_sold
и член типа >double
по имени >revenue
. Эти три переменные-члены будут у каждого объекта класса >Sales_data
.
>Sales_data
переменные-члены >units_sold
и >revenue
будут инициализированы значением 0, а переменная-член >bookNo
— пустой строкой.
Внутриклассовые инициализаторы ограничены формой их использования (см. раздел 2.2.1): они должны либо быть заключены в фигурные скобки, либо следовать за знаком >=
. Нельзя определить внутриклассовый инициализатор в круглых скобках.
В разделе 7.2 указано, что язык С++ обладает еще одним ключевым словом, >class
, также используемым для определения собственной структуры данных. В этом разделе используем ключевое слово >struct
, поскольку пока еще не рассмотрены приведенные в главе 7 дополнительные средства, связанные с классом.
Упражнение 2.39. Откомпилируйте следующую программу и посмотрите, что будет, если не поставить точку с запятой после определения класса. Запомните полученное сообщение, чтобы узнать его в будущем.
>struct Foo { /* пусто */ } // Примечание: нет точки с запятой
>int main() {
> return 0;
>}
Упражнение 2.40. Напишите собственную версию класса >Sales_data
.
>Sales_data
В отличие от класса >Sales_item
, класс >Sales_data
не поддерживает операций. Пользователи класса >Sales_data
должны сами писать все операции, в которых они нуждаются. В качестве примера напишем новую версию программы из раздела 1.5.2, которая выводила сумму двух транзакций. Программа будет получать на входе такие транзакции:
>0-201-78345-X 3 20.00
>0-201-78345-X 2 25.00
Каждая транзакция содержит ISBN, количество проданных книг и цену, по которой была продана каждая книга.
>Sales_data
Поскольку класс >Sales_data
не предоставляет операций, придется написать собственный код, осуществляющий ввод, вывод и сложение. Будем подразумевать, что класс >Sales_data
определен в заголовке >Sales_data.h
. Определение заголовка рассмотрим в разделе 2.6.3.
Так как эта программа будет длиннее любой, написанной до сих пор, рассмотрим ее по частям. В целом у программы будет следующая структура: