Читать «С++ для "чайников" .» онлайн - страница 240

Стефан Рэнди Дэвис

Программа BUDGET2 превосходит BUDGET1 только в одном: она изолирует особенности классов, описывающих счёт, от внешних функций, которые манипулировали счетами. К сожалению, BUDGET2 содержала большое количество дублированного кода в классах Savings и Checking, и именно от него мы и хотим избавиться, используя принципы наследования.

Программа BUDGET3 вносит новые улучшения. С помощью такого "супергероя" объектно-ориентированного программирования, как наследование, и его верного бокового удара — полиморфизма мы смогли оптимизировать два класса счетов, объединив в один класс Account всё  то общее, что присуще этим двум классам, и получив в результате меньшее и более компактное множество классов.

Кроме того, вместо массивов в программе используется связанный список для хранения объектов Account, что снимает ограничение на количество счетов, присущее более ранним версиям программы. Кроме того, код программы разделён на модули с различными пространствами имён .

Реализация модуля со связанным списком...356

Основное ограничение, присущее первым двум версиям программы, заключается в том, что они обе используют для хранения счетов массивы фиксированного размера, так что количество счетов, которые эти программы могут обработать, изначально ограничено. Более разумное решение состоит в использовании связанных списков объектов. Проблема лишь в том, что связанные списки ничего не знают о банковских счетах.

Очевидно, что можно разделить концепцию связанных списков на два класса. Этот тип разделения хотя и отличен от рассматриваемого в книге, но не менее важен. Он разносит классы с отношением СОДЕРЖИТ в различные файлы.

«Контейнер ( такой как массив или связанный список ) СОДЕРЖИТ счета.»

[]

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

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

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

    #ifndef _ACCOUNTLINKEDLIST_

    #define _ACCOUNTLINKEDLIST_

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

_________________

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

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

    class Account ;

    namespace Lists

    {

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

        class AccountLinkedList ;

        class Node ;

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

        class AccountLinkedList

        {

          public :