675 __ Часть IV. Новые возможности C++
Второй пример, программа ExpSum2, представляет собой первый вариант после тщательной переработки с применением обработки исключительных ситуаций C++. Программа ExpSum2 стала короче (хотя это и не является целью введения обработки исключительных ситуаций), вся обработка ошибок сосредоточена в одном месте, и вообще от упрощения кода выигрывает программа в целом.
Структура приложения ExpSum
Основой' программы ExpSum являются два простых класса: Employee (служащие) и Expense (затраты). Программа использует эти классы относительно просто — это вместилища данных, относящихся соответственно к служащим и к затратам. Хотя эти два класса ничем особенно не примеча-гельны, оба они могут выгрузить свои объекты в стандартный поток вывода и загрузить свои объекты из стандартного потока ввода. Поэтому приложение ExpSum может легко сохранять необходимую информацию в файлах и извлекать ее оттуда.
Основная часть реализации классов содержится в заголовочных файлах employee.h и expense.h (листинги 22.25 и 22.27 соответственно), а остальное — операции и конструкторы классов — находится в модулях Employee.cpp л Expense.срр (листинги 22.26 и 22.28). В листинге 22.25 представлен заголовочный файл, содержащий определение класса Employee.
tifndef EMPLOYEE_H (define EMPLOYEE_H
'/ Необходимые заголовки linc-lude <iostream.h> ^include <cstring.h>
:lass Employee ( )ublic:
Employee() ;
void SetID(unsigned NewID)
{ EmployeeID = NewID; } void SetFirstName(const strings strNewName)
{ strFirstName = strNewName; } void SetMiddleInit.ial (char Mewlnitial)
{ Middlelnitial = Newlnitial; } void SetLastName(const strings strNewName)
( strLastName = strNewName; } void SetAddress(const strings strNewAddress)
{ strAddress = strNewAddress; } void SetCity(const. strings strNewCity)
( strCity = s-trNewCity; }