Читать «С++ для "чайников" .» онлайн - страница 247
Стефан Рэнди Дэвис
Кроме того, программа BUDGET3 использует для хранения счетов связанный список, что позволяет снять ограничение на количество обрабатываемых счетов, налагаемое в первых двух версиях использованием массивов. К сожалению, представленный в программе класс AccountLinkedList недостаточно гибок из-за привязки к классу Account.
Программа BUDGET4 использует шаблоны, которые позволяют убрать ограничения, состоящие в привязке списка к конкретному типу хранимых данных.
«Шаблонам посвящён материал .»
[]
Реализация связанного списка в виде шаблона класса...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 стр. . Великолепная десятка
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( )
{
/* Если список пуст, возвращает 0 */
if ( pFirst == 0 )
{
return 0 ;
}
/* В противном случае ищем последний элемент списка */
Node< T >* pN = pFirst ;
while ( true )
{
Node< T >* pNext = pN -> next( ) ;
if ( pNext == 0 )
{
break ;
}
pN = pNext ;
}
return pN ;
}
void addNode( Node< T >* pNode )
{
Node< T >* pN = lastNode( ) ;
if ( pN == 0 )
{
pFirst = pNode ;
}
else
{
pN -> next( pNode ) ;
}
}
protected :
Node< T >* pFirst ;
} ;
#endif
_________________
367 стр. . Программа BUDGET
«Дальнейшее рассмотрение может оказаться проще, если вы мысленно замените обобщённый класс Т действительным классом Account. При этом вы увидите, насколько программа становится похожей на свою предшественницу — программу BUDGET3.»