Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Глава 23. Разложение классов   259




номер счета: 123

Введите           сумму для вклада,

для снятия, 0 для прекращения работы

:200

:-20

:0

Нажмите S для            счетов,

С для чековых, X для     s Введите номер 234

Введите           сумму для вклада, отрицательную для снятия, 0 для прекращения работы

:0

Нажмите S для            счетов,

С для чековых, X для     с Введите номер 345

Введите           сумму для вклада, отрицательную для снятия, 0 для прекращения работы

:200

:-20

:0

Нажмите S для            счетов,

С для чековых, X для     С Введите номер 456

Введите положительную сумму для вклада, отрицательную для снятия, 0 для прекращения работы

:600

:-20

:0

Нажмите S для сберегательных счетов, С для чековых, X для выхода: х Суммы по всем счетам:

Сберегательный счет номер 123 - 180

Сберегательный счет номер 234 = 175

Чековый счет номер 345 179.8

Чековый счет номер 456 580

Всего 1114.8

Объектно-ориентированная программа Budget3 начинается с базового класса Этот класс содержит члены, необходимые для создания связан-

ного списка. Здесь есть указатели на первый и следующий объекты в связанном спи- ске, а также  открытые функции-члены  () и next (). Любой класс, полученный из                    может быть использован для создания связанного списка, скольку он наследует все необходимые функции-члены.

Следующий класс, содержащийся в программе Budget3, — это класс Account. Он обобщает в себе все, что можно сказать о счетах, а именно:

они распознаются по номерам; каждый счет имеет баланс;

пользователь может вкладывать или снимать деньги со счета.

 

Нам известно,  как выполнять вложение денег на счет, поэтому функция

{) определена прямо в классе Account. Однако мы не знаем, как в общем

 


Часть IV. Наследование


виде выполнить снятие денег, поскольку для разных типов счетов эта операция раз- лична. Поэтому  функция  Account:    () объявлена чисто виртуальной (с                                         о" в конце объявления).

Конструктор класса Account начинается с автоматического вызова конструктора который добавляет текущий счет к концу связанного списка объ-

ектов                   Затем конструктор Account создает уникальную для каждого счета информацию, записывая номер счета и начальный баланс (который приравнивается нулю, если при создании счета не был задан другой баланс). Затем увеличивается на единицу значение статического члена count, с помощью которого отслеживается ко- личество существующих в данный момент объектов Account.

Для одного класса существует только одна копия каждого статического объекта. К ней имеют доступ все объекты класса.

 

Функции                             и                                (} служат для того, чтобы предостав- лять возможность считывания номера счета и информации о балансе из внешнего мира, но не допускать непосредственного изменения этих значений.

Функции-члены                          :         (; и nex t () переопределяют свои более ранние версии из класса                                                                                      Без этих на первый взгляд бессмыс- ленных функций пользователь должен был бы сам приводить тип объектов LinkedListObject , которые возвращают  функции    () и nex t () , к типу Account.

displa y () и type( ) придают всем счетам одинаковый формат отоб-

ражения.

Подкласс checking класса Account достаточно прост. Конструктор класса Checking не делает ничего, кроме передачи аргументов конструктору класса Account. Единственная настоящая функция-член в этом классе — это withdrawal О , которая реализует правила работы с чековыми счетами.

Класс Savings идентичен в этом классу                         все, что он делает, — это реа- лизует метод withdrawal

Любой подкласс класса Account, который не переопределяет функцию withdrawa l (), будет виртуальным, и вы не сможете создать объект этого класса.

составляющие главную программу, теперь упрощены до предела. Функ- ция     Account () создает  счет класса                                                                                                    или Savings (в зависимости от символа, введенного пользователем). Это единственное место в программе, где проис- ходит непосредственное обращение к подклассам класса Account.

Функция displayResul t () просматривает связанный список, требуя от каж- дого объекта отобразить свое содержимое, не интересуясь при этом деталями то- го, как именно сберегательные или чековые счета (или любые другие) будут это

 

process! ) имеет еще более впечатляющий вид. Она выполняет вложе- ния (которые обрабатывает функция Account: :deposit() ) и снятия (которые обра- батывают  функции                                                  и в зависи- мости от типа объекта, на который указывает pAccount).

Обратите внимание на то, какой привлекательной теперь стала функция proces s () . Во-первых, полностью исчезла избыточность, которая появлялась благодаря существованию разных версий этой функции. Более важно то, что ло- гика функции process! ) значительно упростилась. Теперь программист может


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 165; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.011 с.)
Главная | Случайная страница | Обратная связь