C++ для «чайников» - [147]
}
/* Savings — свойства, уникальные для сберегательного счёта */
class Savings : public Account
{
public :
Savings::Savings( unsigned accNo ) : Account( 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 ) ;
}
/* AccountPtr — мы храним указатели на объекты */
/* Account, а не сами объекты */
typedef Account* AccountPtr ;
/* Прототипы функций */
unsigned getAccntNo( ) ;
void process( AccountPtr pAccount ) ;
void getAccounts( list< AccountPtr >&accList ) ;
void displayResults( list< AccountPtr >& accList ) ;
_________________
375 стр. Глава 31. Программа BUDGET
/* main — собирает и выводит данные */
int main( int argcs , char* pArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
/* Создание связанного списка */
list< AccountPtr > listAccounts ;
/* Чтение пользовательского ввода */
getAccounts( listAccounts ) ;
/* Вывод связанного списка */
displayResults( listAccounts ) ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
/* getAccounts — загрузка массива счетов */
void getAccounts( list< AccountPtr >& accList )
{
AccountPtr pA ;
/* Цикл, пока не введено 'X' или 'х' */
char accountType ; /* S or С */
while ( true )
{
cout << "Введите S для сберегательного счёта,\n"
<< "С для чекового, X для выхода: " ;
cin >> accountType ;
switch ( accountType )
{
case 'c' :
case 'C' :
pA = new Checking( getAccntNo( ) ) ;
break ;
case 's' :
case 'S' :
pA = new Savings( getAccntNo( ) ) ;
break ;
case 'x' :
case 'X' :
return ;
default :
cout << "Неверный ввод.\n" ;
}
/* Обработка вновь созданного объекта */
accList.push_back( pA ) ;
process( pA ) ;
}
}
_________________
376 стр. Часть 6. Великолепная десятка
/* displayResults — вывод информации о */
/* счетах в связанном списке */
void displayResults( list< AccountPtr >& accntList )
{
double total = 0.0 ;
cout << "\nИтоговая информация:\n" ;
/* Создание итератора и проход по списку */
list< AccountPtr >::iterator iter ;
iter = accntList.begin( ) ;
while ( iter != accntList.end( ) )
{
AccountPtr pAccount = *iter ;
iter++ ;
pAccount -> display( ) ;
total += pAccount -> acntBalance( ) ;
}
cout << "Итого = " << total << endl ;
}
/* getAccntNo — номер счёта для его создания */
unsigned getAccntNo( )
{
unsigned accntNo ;
cout << "Введите номер счёта: " ;
cin >> accntNo ;
return accntNo ;
}
/* process( Account ) — обработка счёта */
void process( AccountPtr 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 ) ;
}
Заголовочный файл list содержит определение шаблона класса list из STL. Классы Account, Checking и Savings остаются неизменными ( т.е. такими, как в программе BUDGET3 ). Изменения начинаются с определения типа AccountPtr примерно в середине программы.
_________________
377 стр. Глава 31. Программа BUDGET
Создание списка счетов...378
Функция main( ) создаёт список объектов listAccounts, который имеет тип list< AccountPtr >.
Теоретически я могу реализовать шаблон класса как list< Account* >, но так поступают редко — дабы не портить определения внутри шаблонов классов STL, обычно используют синонимы указателей, полученные при помощи оператора typedef.
«Тип AccountPtr определён с использованием ключевого слова typedef и представляет собой то же, что и Account*. Таким образом, везде, где написано AccountPtr, можно читать "указатель на Account".»
[Помни!]
Функция main( ) передаёт список указателей на объекты
Автор книги — американский специалист по программированию, один из руководителей фирмы IBM, в своей книге делает попытку изложить общие проблемы создания программного обеспечения, его сопровождения и использования. Особенно подробно рассматриваются все фазы разработки программ разных типов. Изложение ясное, удачно иллюстрировано примерами.Для программистов разной квалификации и пользователей ЭВМ.fb2: ВНИМАНИЕ. В тексте присутствуют таблицы. Рекомендуется читать файл с помощью программы, поддерживающей их отображение.
Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)
Книга посвящена разработке программ для мобильных устройств под управлением операционной системы Android. Рассматривается создание приложений с использованием системных компонентов и служб Android. Приведены базовые данные о структуре приложений, об основных классах и их методах, сопровождаемые примерами кода. Часть 1 содержит шесть глав, описывающих основные принципы создания приложений, пользовательский интерфейс, полномочия приложений, а так же базовые классы: Activity, Intent, Fragment. Книга предназначена для программистов, владеющих языком программирования Java и желающих освоить написание приложений, работающих под ОС Android.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
Система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.