Стефан Дэвис - С++ для чайников .
- Название:С++ для чайников .
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс. Компьютерное издательство Диалектика
- Год:2007
- Город:Москва
- ISBN:0-7645-6852-3, 978-5-8459-0723-3
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стефан Дэвис - С++ для чайников . краткое содержание
1
empty-line
4
С++ для чайников . - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
{
public :
Checking::Checking( LinkedList< Account >* pLL ,
unsigned accNo ) :
Account( pLL , accNo )
{ }
/* Перегрузка чисто виртуальных функций */
virtual bool withdrawal( double amount ) ;
virtual char* type( ) { return "Чековый" ; }
} ;
/* withdrawal — перегрузка Account::withdrawal( ) */
bool Checking::withdrawal( double amount )
{
bool success = Account::withdrawal ( amount ) ;
if ( success && balance < 500.00 )
{
balance -= 0.20 ;
}
return success ;
}
/* Savings — свойства, уникальные для сберегательного счёта */
class Savings : public Account
{
public :
Savings::Savings( LinkedList< Account >* pLL ,
unsigned accNo ) :
Account( pLL , accNo )
{ noWithdrawals = 0 ; }
/* Функции транзакций */
virtual bool withdrawal( double amount ) ;
virtual char* type( ) { return "Savings" ; }
protected :
int noWithdrawals ;
} ;
/* withdrawal — перегрузка Account::withdrawal( ) */
bool Savings::withdrawal( double amount )
{
if ( ++noWithdrawals > 1 )
{
balance -= 5.00 ;
}
return Account::withdrawal( amount ) ;
}
_________________
370 стр. Часть 6. Великолепная десятка
/* Прототипы функций */
unsigned getAccntNo( ) ;
void process( Account* pAccount ) ;
void getAccounts( LinkedList< Account >* pLinkedList ) ;
void displayResults( LinkedList< Account >* pLinkedList ) ;
/* main — собирает и выводит данные */
int main( int argcs , char* pArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
/* Создание связанного списка */
LinkedList< Account > linkedList ;
/* Чтение пользовательского ввода */
getAccounts( & linkedList ) ;
/* Вывод связанного списка */
displayResults( & linkedList ) ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
/* getAccounts — загрузка массива счетов */
void getAccounts( LinkedList< Account >* pLinkedList )
{
Account* pA ;
/* Цикл, пока не введено 'X' или 'х' */
char accountType ; /* S or С */
while ( true )
{
cout << "Введите S для сберегательного счёта,\n"
<< "С для чекового, X для выхода: " ;
cin >> accountType ;
switch ( accountType )
{
case 'c' :
case 'C' :
pA = new Checking( pLinkedList , getAccntNo( ) ) ;
break ;
case 's' :
case 'S' :
pA = new Savings( pLinkedList , getAccntNo( ) ) ;
break ;
case 'x' :
case 'X' :
return ;
default :
cout << "Неверный ввод.\n" ;
}
_________________
371 стр. Глава 31. Программа BUDGET
/* Обработка вновь созданного объекта */
process( pA ) ;
}
}
/* displayResults — вывод информации о */
/* счетах в связанном списке */
void displayResults( LinkedList< Account >* pLinkedList )
{
double total = 0.0 ;
cout << "\nИтоговая информация: \n" ;
for ( Node< Account >* pN = pLinkedList -> firstNode( ) ;
pN != 0 ;
pN = pN -> next( ) )
{
Account* pA = pN -> current( ) ;
pA -> display( ) ;
total += pA -> acntBalance( ) ;
}
cout << "Итого = " << total << "\n" ;
}
/* getAccntNo — номер счёта для его создания */
unsigned getAccntNo( )
{
unsigned accntNo ;
cout << "Введите номер счёта: " ;
cin >> accntNo ;
return accntNo ;
}
/* process( Account ) — обработка счёта */
void process( Account* pAccount )
{
cout << "Введите положительное число для вклада,\n"
<< "отрицательное для снятия,"
<< " 0 для завершения работы\n" ;
double transaction ;
do
{
cout << " : " ;
cin >> transaction ;
// Вклад
if ( transaction > 0 )
{
pAccount -> deposit( transaction ) ;
}
// Снятие
if ( transaction < 0 )
{
pAccount -> withdrawal( -transaction ) ;
}
} while ( transaction != 0 ) ;
}
_________________
372 стр. Часть 6. Великолепная десятка
Первые строки перед определением класса Account инстанцируют шаблоны классов LinkedList и Node в классы LinkedList< Node > и Node< Account > соответственно. Эти строки создают классы, необходимые для объединения объектов Account в связанный список.
Другая программа может с тем же успехом создать класс LinkedList< Student > , LinkedList< Name > , или другой придуманный вами класс.
Класс Account работает так же, как и в предыдущей программе BUDGET3.
Подведение итогов...373
Программа BUDGET3 использует объектно-ориентированные технологии для реализации набора классов счетов, а также включает реализацию связанного списка, который позволяет хранить неограниченное количество счетов. Единственная проблема заключается в том, что класс AccountLinkedList оказывается привязан к классу Account .
В программе BUDGET4 определён шаблон класса LinkedList< class Т > , который может работать с объектами любого типа. В этой версии единственной проблемой ( если это можно считать проблемой ) является то, что нам надо самим реализовывать связанный список.
Связанные списки используются уже очень давно, так что мы изобретаем велосипед. И хотя с методической точки зрения это совсем неплохо, в STL имеется соответствующий шаблон класса, который можно использовать в качестве контейнера ( в STL имеется масса различных контейнеров ). В следующей версии программы BUDGET мы используем этот предопределённый шаблон для хранения объектов Account .
►BUDGET5...373
Программа BUDGET5 — последняя в длинном ряду программ этой главы, призванных решать одну и ту же простую задачу имитации банковских счетов. В программе BUDGET3 эти счета представлены в виде трёх классов — Account , Savings и Checking , для хранения которых используется связанный список. Из жёстко кодированного списка для хранения объектов типа Account в программе BUDGET4 он становится шаблоном класса LinkedList< class Т > .
Программа BUDGET5 идёт на один шаг дальше и использует шаблон класса из STL.
«Для того чтобы понять эту программу, вы должны ознакомиться с главой 28, "Стандартная библиотека шаблонов".»
[ Помни! ]
Использование шаблона класса из STL...373
Стандартная библиотека шаблонов определяет множество различных типов контейнеров, которые можно использовать для хранения групп объектов. В следующей версии программы BUDGET используется шаблон класса list .
/* BUDGET5.CPP — идентична другим программам */
/* Budget за исключением использования */
/* шаблона класса из STL */
#include
#include
#include
#include
_________________
373 стр. Глава 31. Программа BUDGET
using namespace std ;
/* Account — абстрактный класс, включающий */
/* общие свойства различных счетов */
class Account
{
public :
Account::Account( unsigned accNo )
Читать дальшеИнтервал:
Закладка: