Выбрать главу

[Помни!]

Интерфейс соответствующего класса определён в заголовочном файле AccountLinkedList.h

    /* AccountLinkedList — поддерживает связанный */

    /*                     список объектов Account */

    #ifndef _ACCOUNTLINKEDLIST_

    #define _ACCOUNTLINKEDLIST_

    /* Данное предварительное объявление — неприятное следствие того, что Account не является частью пространства имён */

_________________

356 стр. Часть 6. Великолепная десятка

    /* Lists. Этой неприятности мы сумеем избежать в следующей версии программы */

    class Account ;

    namespace Lists

    {

        /* Предварительное объявление классов */

        class AccountLinkedList ;

        class Node ;

        /* LinkedList — связанный  список объектов Node */

        class AccountLinkedList

        {

          public :

            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 стр. Глава 31. Программа 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>