Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Глава 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; Нарушение авторского права страницы