Стефан Дэвис - С++ для чайников .

Тут можно читать онлайн Стефан Дэвис - С++ для чайников . - бесплатно полную версию книги (целиком) без сокращений. Жанр: sci_tech, издательство Издательский дом Вильямс. Компьютерное издательство Диалектика, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    С++ для чайников .
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс. Компьютерное издательство Диалектика
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    0-7645-6852-3, 978-5-8459-0723-3
  • Рейтинг:
    4/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Стефан Дэвис - С++ для чайников . краткое содержание

С++ для чайников . - описание и краткое содержание, автор Стефан Дэвис, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
empty-line
1
empty-line
4

С++ для чайников . - читать онлайн бесплатно полную версию (весь текст целиком)

С++ для чайников . - читать книгу онлайн бесплатно, автор Стефан Дэвис
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

#include

#include

#include

#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 ;

count++ ;

}

_________________

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

/* Функции доступа */

int accountNo( ) { return accountNumber ; }

double acntBalance( ) { return balance ; }

static int noAccounts( ) { return count ; }

/* Функции транзакций */

void deposit( double amount ) { balance += amount ; }

virtual bool withdrawal( double amount )

{

if ( balance < amount )

{

cout << "Недостаточно денег: на счету " << balance

<<", снимаем " << amount

<< endl ;

return false ;

}

balance -= amount ;

return true ;

}

/* Функция вывода на экран */

void display( )

{

cout << type( )

<< " счёт " << accountNumber

<< " = " << balance

<< endl ;

}

virtual char* type( ) = 0 ;

protected :

/* Информация о связанном списке */

Node node ;

static int count ; /* Количество счетов */

unsigned accountNumber ;

double balance ;

} ;

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

int Account::count = 0 ;

/* Checking — свойства, уникальные для чекового счёта */

class Checking : public Account

{

public :

Checking::Checking( AccountLinkedList* pLL ,

unsigned accNo ) :

Account( pLL , accNo )

{ }

/* Перегрузка чисто виртуальных функций */

virtual bool withdrawal( double amount ) ;

virtual char* type( ) { return "Чековый" ; }

} ;

/* withdrawal — перегрузка Account::withdrawal( ) */

_________________

359 стр. Глава 31. Программа BUDGET

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( AccountLinkedList* pLL ,

unsigned accNo ) :

Account( pLL , accNo )

{ noWithdrawals = 0 ; }

/* Функции транзакций */

virtual bool withdrawal( double amount ) ;

virtual char* type( ) { return "Сберегательный" ; }

protected :

int noWithdrawals ;

} ;

/* withdrawal — перегрузка Account::withdrawal( ) */

bool Savings::withdrawal( double amount )

{

if ( ++noWithdrawals > 1 )

{

balance -= 5.00 ;

}

return Account::withdrawal( amount ) ;

}

/* Прототипы функций */

unsigned getAccntNo( ) ;

void process( Account* pAccount ) ;

void getAccounts( AccountLinkedList* pLinkedList ) ;

void displayResults( AccountLinkedList* pLinkedList ) ;

/* main — собирает и выводит данные */

int main( int argcs , char* pArgs[ ] )

{

setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */

/* Создание связанного списка */

AccountLinkedList* pLinkedList = new AccountLinkedList( ) ;

/* Чтение пользовательского ввода */

getAccounts( pLinkedList ) ;

/* Вывод связанного списка */

displayResults( pLinkedList ) ;

_________________

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

/* Пауза для того, чтобы посмотреть на результат работы программы */

system( "PAUSE" ) ; return 0 ;

}

/* getAccounts — загрузка массива счетов */

void getAccounts( AccountLinkedList* pLinkedList )

{

Account* pA ;

/* Цикл, пока не введено 'X' или 'х' */

char accountType ; /* S или С */

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" ;

}

/* Обработка вновь созданного объекта */

process( pA ) ;

}

}

/* displayResults — вывод информации о счетах в связанном списке */

void displayResults( AccountLinkedList* pLinkedList )

{

double total = 0.0 ;

cout << "\nИтоговая информация:\n" ;

for ( Node* pN = Node::firstNode( pLinkedList ) ;

pN != 0 ;

pN = pN -> nextNode( ) )

{

Account* pA = pN -> currentAccount( ) ;

pA -> display( ) ;

total += pA -> acntBalance( ) ;

}

_________________

361 стр. Глава 31. Программа BUDGET

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 ) ;

}

Первый класс, содержащийся в BUDGET3, — Account . Этот класс инкапсулирует всё, что мы знаем об обобщённых счетах, а именно:

■■■

■ они распознаются по номерам;

■ каждый счёт имеет баланс;

■ пользователь может вкладывать или снимать деньги со счёта.

■■■

В этом классе сведён воедино код, общий для классов Savings и Checking из программы BUDGET2. Теперь Savings и Checking представляют собой подклассы Account . Я сделал функцию Account::type( ) чисто виртуальной, так что она обязана быть переопределена в каждом из подклассов.

Конструктор Account создаёт уникальную для каждого счёта информацию, записывая номер счёта и начальный баланс ( который приравнивается нулю, если при создании счёта не был задан другой баланс ). Затем увеличивается на единицу значение статического члена count , с помощью которого отслеживается количество существующих в данный момент объектов Account . Конструктор также инициализирует член node , который используется для объединения счетов в единый связанный список.

_________________

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

Для одного класса существует только одна копия каждого статического объекта К - фото 352

«Для одного класса существует только одна копия каждого статического объекта. К ней имеют доступ все объекты класса.»

[ Помни! ]

Функции accountNo( ) и accountBalance( ) служат для того, чтобы предоставлять возможность считывания номера счёта и информации о балансе из внешнего мира, но не допускать непосредственного изменения этих значений.

Функции display( ) и type( ) придают всем счетам одинаковый формат отображения. Виртуальный метод type( ) будет переопределён в классах-наследниках. Так, метод Checking::type( ) вернёт строку "Чековый". Этот распространённый трюк позволяет методам базового класса, таким как Account::display( ) , использовать точное описание класса.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стефан Дэвис читать все книги автора по порядку

Стефан Дэвис - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




С++ для чайников . отзывы


Отзывы читателей о книге С++ для чайников ., автор: Стефан Дэвис. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x