C++ для «чайников» - [144]
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 стр. Глава 31. Программа BUDGET
«Дальнейшее рассмотрение может оказаться проще, если вы мысленно замените обобщённый класс Т действительным классом Account. При этом вы увидите, насколько программа становится похожей на свою предшественницу — программу BUDGET3.»
[Советы]
Выражение template < class Т > class LinkedList представляет собой предварительное объявление шаблона, необходимое для класса Node.
«Не забывайте о том, что шаблоны классов LinkedList и Node не являются реальными классами до тех пор, пока параметр Т не будет заменён действительным классом.»
[Помни!]
Шаблон класса Node сконструирован для работы в качестве узла связанного списка. Каждый узел указывает на объект класса Т, который будет определён позже. Конструктор инициализирует члены-указатели: pList указывает на LinkedList, членом которого является данный объект Node, pObject указывает на объект типа Т, a pNext инициализируется значением 0 , указывающим, что пока узел не является членом списка.
"Активный метод" next ( Node< T >* ) добавляет текущий узел в список путём инициализации указателя pNext. "Пассивный метод" next( ) просто возвращает следующий объект Node< T > в списке. Это обычная практика кодирования, когда функция fn( ) возвращает текущее значение объекта, a fn( Т ) устанавливает его значение на основе аргумента.
Эта версия addNode( ) более усовершенствована по сравнению с представленной в программе BUDGET3, поскольку добавляет узел в конец списка. Преимущество такого подхода в том, что объекты считываются из списка в том же порядке, в котором были в него внесены, а недостаток в том, что метод lastNode( ) должен выполнять проход по всему списку всякий раз, когда требуется внести в список новый объект. Это может существенно замедлить работу программы при большом количестве элементов в списке.
Исходный код BUDGET4...368
Исходный код программы BUDGET4 практически идентичен коду BUDGET3.
/* BUDGET4.CPP — в этой версии используется */
/* шаблон класса LinkedList */
//
#include
#include
#include
using namespace std ;
#include "LinkedList.h"
/* Account — абстрактный класс, включающий */
/* общие свойства различных счетов */
class Account ;
template class LinkedList< Account > ;
template class Node< Account > ;
class Account
{
public :
Account::Account( LinkedList< Account >* pList ,
unsigned accNo )
{
/* Инициализация данных-членов */
_________________
368 стр. Часть 6. Великолепная десятка
accountNumber = accNo ;
balance = 0 ;
/* Внесение в список */
pNode = new Node< Account >( pList , this ) ;
pList -> addNode( pNode ) ;
count++ ;
}
/* Функции доступа */
int accountNo( ) { return accountNumber ; }
double acntBalance( ) { return balance ; }
static int noAccounts( ) { return count ; }
static Account* first( LinkedList< Account >* pLinkedList )
{
Node< Account >* pNode = pLinkedList -> firstNode( ) ;
return pNode -> current( ) ;
}
Account* next( )
{
Node< Account >* pNextNode = pNode -> next( ) ;
return pNextNode -> current( ) ;
}
/* Функции транзакций */
void deposit( double amount ) { balance += amount ; }
virtual bool withdrawal( double amount )
{
if ( balance < amount )
{
cout << "Недостаточно денег: на счету " << balance
<< ", снимаем " << amount
<< endl ;
return false ;
}
balance -= amount ;
return true ;
}
/* Функция вывода на экран */
void display( )
Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)
Автор книги — американский специалист по программированию, один из руководителей фирмы IBM, в своей книге делает попытку изложить общие проблемы создания программного обеспечения, его сопровождения и использования. Особенно подробно рассматриваются все фазы разработки программ разных типов. Изложение ясное, удачно иллюстрировано примерами.Для программистов разной квалификации и пользователей ЭВМ.fb2: ВНИМАНИЕ. В тексте присутствуют таблицы. Рекомендуется читать файл с помощью программы, поддерживающей их отображение.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.