{
pNode -> pNext = pHead ;
pHead = pNode ;
}
}
Оценка бюджета...365
Задача, решаемая программой BUDGET, очень проста. Тем не менее сравнение разных версий этой программы даёт вам представление об отличии чисто функционального программирования ( BUDGET1 ) от объектно-основанного ( BUDGET2 ) и объектно-ориентированного программирования ( BUDGET3 ).
Основная проблема программы BUDGET3 в том, что связанный список, который в ней реализован, в состоянии работать только с классом Account и никаким другим. Проделав такую работу по созданию связанного списка, вы, вероятно, захотите использовать его и в других программах — например, для хранения информации о студентах.
Программа BUDGET4 расширяет рамки применения класса LinkedList. Чтобы разобраться в том, как она это делает, вы должны сперва ознакомиться с материалом главы 27.
_________________
365 стр. Глава 31. Программа BUDGET
►BUDGET4...366
Программа BUDGET имитирует работу банка, позволяя вкладывать и снимать деньги со счёта. Пользователь вводит последовательность банковских счетов, причём для каждого счёта вводится серия вкладов на счёт и снятия денег со счёта. После того как будут введены все счета и все транзакции, программа выводит состояние всех счетов ( а также общий баланс по всем счетам ). В программах BUDGET2 и BUDGET3 имитируются два вида счетов — чековый и сберегательный. Чековый счёт отличается тем, что если на нём остаётся меньше 500 долларов, то за каждый обработанный чек удерживается 20 центов. Первое снятие со сберегательного счёта выполняется бесплатно, а каждое последующее обходится в 5 долларов, независимо от состояния счёта. Программа BUDGET2 использует для решения поставленной задачи функции, a BUDGET3 — объектно-ориентированные концепции из четвёртой части книги.
Кроме того, программа BUDGET3 использует для хранения счетов связанный список, что позволяет снять ограничение на количество обрабатываемых счетов, налагаемое в первых двух версиях использованием массивов. К сожалению, представленный в программе класс AccountLinkedList недостаточно гибок из-за привязки к классу Account.
Программа BUDGET4 использует шаблоны, которые позволяют убрать ограничения, состоящие в привязке списка к конкретному типу хранимых данных.
«Шаблонам посвящён материал главы 27, "Шаблоны С++".»
[Помни!]
Реализация связанного списка в виде шаблона класса...366
Приведённый далее шаблон класса LinkedList выглядит практически идентично классу AccountLinkedList из программы BUDGET3, если заменить класс Node обобщённым классом Т.
/* LinkedList — связанный список произвольных объектов */
#ifndef _ACCOUNTLINKEDLIST_
#define _ACCOUNTLINKEDLIST_
/* Предварительное объявление класса LinkedList */
template < class T > class LinkedList;
/* Node — узел связанного списка; каждый */
/* узел указывает на объект Т */
template < class T > class Node
{
public:
Node(LinkedList< T >* pL, T* pT)
{
pList = pL;
pNext = 0;
pObject = pT;
}
Node< T >* next( ) { return pNext; }
Node<T >* next(Node< T >* pN) { pNext = pN;
return pNext; }
T* current( ) { return pObject; }
_________________
366 стр. Часть 6. Великолепная десятка
protected:
LinkedList< T >* pList;
Node< T >* pNext;
T* pObject;
};
/* LinkedList — связанный список объектов Node */
template < class T > class LinkedList
{
public :
LinkedList< T >( ) { pFirst = 0 ; }
Node< T >* firstNode( ) { return pFirst ; }
Node< T >* lastNode( )