Читать «С++ для "чайников" .» онлайн - страница 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 ;