Опустившись ниже по списку, мы видим, что fn2( ) работает почти в два раза больше, чем fn1( ). В основном это связано с тем, что функция main( ) передаёт функции fn2( ) объект Person по значению, что приводит к дополнительному вызову конструктора копирования.
_________________
342 стр. Часть 6. Великолепная десятка
Глава 31. ПРОГРАММА BUDGET...343
ОГЛАВЛЕНИЕ
В этой главе...
►BUDGET1 343
►BUDGET2 348
►BUDGET3 355
►BUDGET4 366
►BUDGET5 377
В этой дополнительной главе описана серия программ для работы с воображаемым банковским счётом. Первая из них, BUDGET1, решает поставленную задачу с использованием простейших ( и подверженных ошибкам ) технологий функционального программирования. В программе BUDGET2 информация о счетах хранится в двух классах, Savings и Checking. Программа BUDGET3 выражает взаимоотношения классов Savings и Checking путём порождения их из общего класса Account. Объекты в этой программе хранятся в связанном списке. Программа BUDGET4 обобщает связанный список, превращая его в шаблон класса LinkedList< class Т >, а в программе BUDGET5 мы перестаём изобретать велосипед и используем один из контейнеров STL. Все исходные тексты программ находятся на прилагаемом компакт-диске.
►BUDGET1...343
Главы, составляющие две первые части книги, предоставляют вам достаточно информации для написания собственной нетривиальной программы. Такой программой является рассматриваемая далее программа BUDGET 1.
В этой программе используются концепции С++, рассмотренные в первых двух частях книги. Программа BUDGET моделирует простейший банковский счёт ( в очень упрощённом виде ). Эта программа будет выполнять такие действия:
■■■
■ создавать один или несколько банковских счетов;
■ присваивать уникальный номер каждому счёту;
■ работать со счётом — создание депозита и снятие денег;
■ выводить окончательный баланс всех счетов, после того как пользователь решит выйти из программы.
■■■
Программа имитирует банковские транзакции, подчиняющиеся следующим правилам ( в процессе развития программы к этим правилам будут добавлены и другие ).
■■■
■ Баланс не может быть отрицательным ( каким бы дружественным не был к вам ваш банк, настолько дружественным он быть просто не в состоянии ).
■ Создание депозита не влечёт за собой никаких расходов.
■■■
_________________
343 стр. Глава 31. Программа BUDGET
Вот как выглядит исходный текст данной программы.
/* BUDGET1.CPP — "Функциональная" программа бюджета */
#include
#include
#include
using namespace std ;
/* Максимальное количество счетов */
const int maxAccounts = 10 ;
/* Данные, описывающие счёт */
unsigned accountNumber[ maxAccounts ] ;
double balance[ maxAccounts ] ;
/* Прототипы функций */
void process( unsigned& accountNumber ,
double& balance ) ;
void init( unsigned* pAccountNumber ,
double* pBalance ) ;
/* main — собирает начальные входные данные и выводит конечные суммы */
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
cout << "Нажмите С для продолжения, X для выхода:\n" ;
// Цикл ввода
int noAccounts = 0 ; /* Количество счетов */
/* Нельзя создать счетов больше, чем выделено места */
cout << "Программа создаёт банковские счета\n" << endl ;
while ( noAccounts < maxAccounts )
{
char transactionType ;
cout << "С для создания счёта, X для выхода: " ;
cin >> transactionType ;
/* Выход, если пользователь ввёл X */
if ( transactionType == 'x' ||