Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Глава 23. Разложение классов 253
// — Программа банковского // с наследованием и полиморфизмом. Обратите // внимание на то, стала эта // программа по сравнению с // после того как из нее был удален // дублированный код. Теперь одна функция // и чековые и // (а также любые другие, которые вы можете // придумать в будущем). // // Кроме того, вместо массива, который может иметь // только определенную длину, эта версия хранит // в связанном
#include <stdlib.h>
<string.h>
ect {
// добавим текущий объект к // связанному списку
// управление связанным списком static { return }
{ return i void ;
// будем содержать счета в связанном списке, // так что теперь не ограничения на // количество объектов
pNext;
// инициализируем указатель на // объект в связанном списке = 0;
// добавим текущий объект к связанному списку объектов void LinkedListObject::addToEnd()
// добавим объект к концу списка // и учтем его в счетчике count
Часть Наследо (pFirst == 0) { // список пуст; сделаем этот объект первым pFirst = this; } else { найдем последний элемент списка
for = pFirst; pA->pNext; = pA->pNext) {} ,' / свяжем текущий объект с концом списка pA->pNext = this; ) pNext = // этот объект — последний
// Account — этот абстрактный класс объединяет в себе // свойства обоих типов как чековых, // так и отсутствует реализация // - функции снятия, которая различна // для разных типов счетов Account : {
accNo, double initialBalance = 0.0) { // инициализируем объекта = balance initialBalance; // учтем этот объект
// функции доступа int { return }
{ return balance; } с int { return count;
// функции связанного списка, обеспечивающие // работы с ним. Они // помогут сберечь много времени в будущем static { return Глава 23. Разложение классов 255 Account* return } // функции транзакций void amount) balance += amount; virtual void amount) = 0; // функция вывода объекта void << << " счет номер " << accountNumber << " " << balance « "\n"; virtual char* = 0; protected: static int count; // количество счетов accountNumber;
// выделим место под статический член int = 0;
// Checking — этот класс содержит уникальные для данного // класса Много ли от него осталось? : Account { public:
sccNo,
= 0.0) :
// чисто функции virtual void amount); char* f return "Чековый";
// — перегрузим функцию-член // так, чтобы ока // взимала центов за каждое снятие // с чека с балансом меньше $500 void { if (balance < amount )
Часть IV. Наследование << "Недостаточно на счете "баланс равен " << balance << ", попытка снять " << amount << "\п";
balance -= amount; .'/ если баланс упал слишком низко, .'/ гонорар за обслуживание ..1 < 500.00)
balance -= 0.20;
// — то же самое, что и Checking, за // исключением еще одного члена Savings : Account {
double initialBalance} { = 0; i
// функции транзакций virtual void amount); char' { return
protected: int
// withdrawal - перегрузим функцию-член // так, чтобы она // взимала гонорар за обслуживание Б // змере $5 при первом снятии за месяц Sav : : { if < amount) { ;out << "Недостаточно денег на "баланс равен " << balance << ", попытка снять " << amount << "\п"; }
|
Последнее изменение этой страницы: 2019-04-19; Просмотров: 192; Нарушение авторского права страницы