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

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

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

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

Интервал:

Закладка:

Сделать

Кроме того, программа BUDGET3 использует для хранения счетов связанный список, что позволяет снять ограничение на количество обрабатываемых счетов, налагаемое в первых двух версиях использованием массивов. К сожалению, представленный в программе класс AccountLinkedList недостаточно гибок из-за привязки к классу Account .

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

Шаблонам посвящён материал главы 27 Шаблоны С Помни - фото 355

«Шаблонам посвящён материал главы 27, "Шаблоны С++".»

[ Помни! ]

Реализация связанного списка в виде шаблона класса...366

Приведённый далее шаблон класса LinkedList выглядит практически идентично классу AccountLinkedList из программы BUDGET3, если заменить класс Node обобщённым классом Т .

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

#ifndef _ACCOUNTLINKEDLIST_

#define _ACCOUNTLINKEDLIST_

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

template < class T > class LinkedList;

/* Node — узел связанного списка; каждый */

/* узел указывает на объект Т */

template < class T > class Node

{

public:

Node(LinkedList< T >* pL, T* pT)

{

pList = pL;

pNext = 0;

pObject = pT;

}

Node< T >* next( ) { return pNext; }

Node* next(Node< T >* pN) { pNext = pN;

return pNext; }

T* current( ) { return pObject; }

_________________

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

protected:

LinkedList< T >* pList;

Node< T >* pNext;

T* pObject;

};

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

template < class T > class LinkedList

{

public :

LinkedList< T >( ) { pFirst = 0 ; }

Node< T >* firstNode( ) { return pFirst ; }

Node< T >* lastNode( )

{

/* Если список пуст, возвращает 0 */

if ( pFirst == 0 )

{

return 0 ;

}

/* В противном случае ищем последний элемент списка */

Node< T >* pN = pFirst ;

while ( true )

{

Node< T >* pNext = pN -> next( ) ;

if ( pNext == 0 )

{

break ;

}

pN = pNext ;

}

return pN ;

}

void addNode( Node< T >* pNode )

{

Node< T >* pN = lastNode( ) ;

if ( pN == 0 )

{

pFirst = pNode ;

}

else

{

pN -> next( pNode ) ;

}

}

protected :

Node< T >* pFirst ;

} ;

#endif

_________________

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

Дальнейшее рассмотрение может оказаться проще если вы мысленно замените - фото 356

«Дальнейшее рассмотрение может оказаться проще, если вы мысленно замените обобщённый классТ действительным классомAccount . При этом вы увидите, насколько программа становится похожей на свою предшественницу — программуBUDGET3

[ Советы ]

Выражение template < class Т > class LinkedList представляет собой предварительное объявление шаблона, необходимое для класса Node .

Не забывайте о том что шаблоны классовLinkedList иNode не являются реальными - фото 357

«Не забывайте о том, что шаблоны классовLinkedList иNode не являются реальными классами до тех пор, пока параметрТ не будет заменён действительным классом.»

[ Помни! ]

Шаблон класса Node сконструирован для работы в качестве узла связанного списка. Каждый узел указывает на объект класса Т , который будет определён позже. Конструктор инициализирует члены-указатели: pList указывает на LinkedList , членом которого является данный объект Node , pObject указывает на объект типа Т , a pNext инициализируется значением 0 , указывающим, что пока узел не является членом списка.

"Активный метод" next ( Node< T >* ) добавляет текущий узел в список путём инициализации указателя pNext . "Пассивный метод" next( ) просто возвращает следующий объект Node< T > в списке. Это обычная практика кодирования, когда функция fn( ) возвращает текущее значение объекта, a fn( Т ) устанавливает его значение на основе аргумента.

Эта версия addNode( ) более усовершенствована по сравнению с представленной в программе BUDGET3, поскольку добавляет узел в конец списка. Преимущество такого подхода в том, что объекты считываются из списка в том же порядке, в котором были в него внесены, а недостаток в том, что метод lastNode( ) должен выполнять проход по всему списку всякий раз, когда требуется внести в список новый объект. Это может существенно замедлить работу программы при большом количестве элементов в списке.

Исходный код BUDGET4...368

Исходный код программы BUDGET4 практически идентичен коду BUDGET3.

/* BUDGET4.CPP — в этой версии используется */

/* шаблон класса LinkedList */

//

#include

#include

#include

using namespace std ;

#include "LinkedList.h"

/* Account — абстрактный класс, включающий */

/* общие свойства различных счетов */

class Account ;

template class LinkedList< Account > ;

template class Node< Account > ;

class Account

{

public :

Account::Account( LinkedList< Account >* pList ,

unsigned accNo )

{

/* Инициализация данных-членов */

_________________

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

accountNumber = accNo ;

balance = 0 ;

/* Внесение в список */

pNode = new Node< Account >( pList , this ) ;

pList -> addNode( pNode ) ;

count++ ;

}

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

int accountNo( ) { return accountNumber ; }

double acntBalance( ) { return balance ; }

static int noAccounts( ) { return count ; }

static Account* first( LinkedList< Account >* pLinkedList )

{

Node< Account >* pNode = pLinkedList -> firstNode( ) ;

return pNode -> current( ) ;

}

Account* next( )

{

Node< Account >* pNextNode = pNode -> next( ) ;

return pNextNode -> current( ) ;

}

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

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< Account >* pNode ;

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

unsigned accountNumber ;

double balance ;

} ;

_________________

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

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

int Account::count = 0 ;

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

class Checking : public Account

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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