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

Тут можно читать онлайн Стефан Дэвис - С++ для чайников . - бесплатно полную версию книги (целиком) без сокращений. Жанр: 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

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

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

Интервал:

Закладка:

Сделать

Подкласс Checking класса Account достаточно прост. Конструктор класса Checking только передаёт аргументы конструктору класса Account . Единственная настоящая функция-член в этом классе — это withdrawal( ) , которая реализует правила работы с чековыми счетами.

Класс Savings идентичен в этом отношении классу Checking : всё, что он делает, — это реализует метод withdrawal( ) .

Любой подкласс классаAccount который не переопределяет функциюtype - фото 353

«Любой подкласс классаAccount , который не переопределяет функциюtype( ) , будет абстрактным, и вы не сможете создать объект этого класса.»

[ Помни! ]

Функции, составляющие главную программу, теперь упрощены до предела. Функция getAccount( ) создаёт счёт класса Checking или Savings ( в зависимости от символа, введённого пользователем ). Это единственное место в программе, где происходит непосредственное обращение к подклассам класса Account .

Функция displayResults( ) проходит по связанному списку, опрашивая каждый объект Account для вывода информации о чековом или сберегательном счёте ( а также о других типах счетов, если таковые встретятся в дальнейшем ). Аналогично функция process( ) выполняет вклады и снятия со счетов ( объектов Account ). Как именно выполняются эти действия — определяют сами счета.

Метод displayResults( ) модифицирован для работы со связанным списком. В качестве аргумента этой функции передаётся связанный список, из которого функция считывает информацию. Цикл for начинается с первого объекта в списке, который возвращает вызов Node::firstNode( ) . Переход к следующему объекту в списке осуществляется при помощи функции nextNode( ) . Цикл завершает свою работу, когда вызов nextNode( ) возвращает 0.

Вывод на экран этой версии программы идентичен выводу предыдущей программы BUDGET2 с той разницей, что итоговая информация о счетах выводится в обратном порядке. Это связано с тем, что новые счета добавляются в начало списка.

Классы связанных списков...363

Связанный список создаётся при помощи двух классов — AccountLinkedList и Node , которые определены в заголовочном файле AccountLinkedList.h .

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

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

#ifndef _ACCOUNTLINKEDLIST_

#define _ACCOUNTLINKEDLIST_

_________________

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

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

class Account ;

namespace Lists

{

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

class AccountLinkedList ;

class Node ;

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

class AccountLinkedList

{

public :

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

_________________

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

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

Заголовочный указатель это указатель на первый элемент списка Помни - фото 354

«Заголовочный указатель — это указатель на первый элемент списка.»

[ Помни! ]

Основная работа выполняется в классе Node . Каждый узел Node указывает на следующий в списке объект при помощи члена pNext . Кроме того, узел также указывает на объект Account при помощи указателя pAccount . Указатель pList указывает на связанный список, которому принадлежит данный узел.

Ещё раз взгляните на исходный файл BUDGET3.срр . Функция main( ) определяет объект класса AccountLinkedList — это и есть связанный список. Ссылка на него передаётся конструктору Account . Конструктор Node( ) , который вызывается из конструктора Account , создаёт узел, который является членом данного связанного списка и указывает на создаваемый счёт.

Маленький исходный файл AccountLinkedList.срр нужен для того, чтобы позволить классу AccountLinkedList обратиться к члену Node . Дело в том, что класс Node определён в заголовочном файле после класса AccountLinkedList , поэтому обращаться к его членам в определении класса AccountLinkedList нельзя. Изменение порядка объявлений не решает данную проблему, поскольку класс Node в AccountLinkedList.h также содержит ссылки на класс AccountLinkedList .

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

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

#include "AccountLinkedList.h"

namespace Lists

{

/* addNode — добавляет узел в начало текущего связанного списка */

void AccountLinkedList::addNode( Node* pNode )

{

pNode -> pNext = pHead ;

pHead = pNode ;

}

}

Оценка бюджета...365

Задача, решаемая программой BUDGET, очень проста. Тем не менее сравнение разных версий этой программы даёт вам представление об отличии чисто функционального программирования ( BUDGET1 ) от объектно-основанного ( BUDGET2 ) и объектно-ориентированного программирования ( BUDGET3 ).

Основная проблема программы BUDGET3 в том, что связанный список, который в ней реализован, в состоянии работать только с классом Account и никаким другим. Проделав такую работу по созданию связанного списка, вы, вероятно, захотите использовать его и в других программах — например, для хранения информации о студентах.

Программа BUDGET4 расширяет рамки применения класса LinkedList . Чтобы разобраться в том, как она это делает, вы должны сперва ознакомиться с материалом главы 27.

_________________

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

►BUDGET4...366

Программа BUDGET имитирует работу банка, позволяя вкладывать и снимать деньги со счёта. Пользователь вводит последовательность банковских счетов, причём для каждого счёта вводится серия вкладов на счёт и снятия денег со счёта. После того как будут введены все счета и все транзакции, программа выводит состояние всех счетов ( а также общий баланс по всем счетам ). В программах BUDGET2 и BUDGET3 имитируются два вида счетов — чековый и сберегательный. Чековый счёт отличается тем, что если на нём остаётся меньше 500 долларов, то за каждый обработанный чек удерживается 20 центов. Первое снятие со сберегательного счёта выполняется бесплатно, а каждое последующее обходится в 5 долларов, независимо от состояния счёта. Программа BUDGET2 использует для решения поставленной задачи функции, a BUDGET3 — объектно-ориентированные концепции из четвёртой части книги.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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