Читать «С++ для "чайников" .» онлайн - страница 241
Стефан Рэнди Дэвис
AccountLinkedList( ) { pHead = 0 ; }
void addNode( Node* pNode ) ;
Node* firstNode( ) { return pHead ; }
protected :
Node* pHead ;
} ;
/* Node — узел в связанном списке, указывающий на объект Account */
class Node
{
friend class AccountLinkedList ;
public :
Node( AccountLinkedList* pL , Account* pAcc )
{
pList = pL ;
pNext = 0 ;
pAccount = pAcc ;
pL -> addNode( this ) ;
}
static Node* firstNode( AccountLinkedList* pList )
{
return pList -> firstNode( ) ;
}
Node* nextNode( ) { return pNext ; }
Account* currentAccount( ) { return pAccount ; }
protected :
AccountLinkedList* pList ;
Node* pNext ;
Account* pAccount ;
} ;
}
#endif
Файл AccountLinkedList.cpp реализует простой связанный список банковских счетов.
_________________
357 стр. . Программа BUDGET
/* AccountLinkedList — поддерживает связанный список объектов Account */
#include "AccountLinkedList.h"
namespace Lists
{
/* addNode — добавляет узел в начало текущего связанного списка */
void AccountLinkedList::addNode( Node* pNode )
{
pNode -> pNext = pHead ;
pHead = pNode ;
}
}
Каждый объект Node связан со своим объектом Account. Указатель Node::pNext указывает на следующий счёт в списке. Объект AccountLinkedList представляет весь связанный список целиком; указатель AccountLinkedList::pHead указывает на первый объект Node в списке. Для простоты функция addNode( ) добавляет объекты Node в начало списка.
Работа со счетами...358
Данная версия программы BUDGET использует связанный список, реализованный в файле AccountLinkedList.срр. Этот класс позволяет программе хранить и работать с количеством счетов, ограниченным только объёмом свободной памяти.
Файл BUDGET3.срр представляет собой главный модуль программы, в котором содержится код приложения.
//
/* BUDGET3.СРР — Программа банковского бюджета с наследованием и полиморфизмом. Теперь одна функция может обрабатывать и чековые, и сберегательные счета ( а также любые другие, которые вы можете придумать в будущем ). */
//
/* Кроме того, вместо массива, который может иметь только определённую длину, эта версия хранит счета в связанном списке. */
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include "AccountLinkedList.h"
using namespace std ;
using namespace Lists ;
/* Account — абстрактный класс, включающий общие свойства различных счетов */
class Account
{
public :
Account::Account( AccountLinkedList* pList , int accNo )
: node( pList , this )
{
/* Инициализация данных-членов */
accountNumber = accNo ;
balance = 0 ;