630____________ ________ ____Часть IV. Новые возможности C++

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

К счастью, приложение ExpSum2 снимает все эти проблемы.

ExpSum2: Отчет о расходах в современном стиле

Возможно, назвать программу ExpSum2 отчетом в современном стиле будет некоторым преувеличением, но это приложение, безусловно, является большим шагом вперед по сравнению с ExpSuml. Обработка исключительных ситуаций позволяет программе сосредоточить борьбу с ошибками в одном месте, не принося в жертву удобочитаемость и гибкость программы.

Иерархия классов исключительных ситуаций в ExpSum2. В листинге 22.31 показано содержимое заголовка expex.h. Этот новый заголовочный файл содержит определения типов исключительных ситуаций, используемых новой инфраструктурой обработки ошибок программы ExpSum2.

h06301.jpg

#ifndef EXCEPT_H

#define EXCEPT_H

// Необходимые заголовки

#include <cstring.h>

// Коды ошибок typedef enum (

EXP_NO_ERROR,

EXP_GENERIC_ERROR,

EXP_ERR _EXPENSE_TOO_SMALL,

EXP_ERR_EXPENSE_TOO _LARGE,

EXP_ERR_NO_EXPENSE_ITEMS,

EXP_ERR_TOO_MANY_EXPENSE_ITEMS,

EXP__ERR_rOTAL_EXPENSE_TOO LARGE } ErrorCode;

// Базовый класс исключительных ситуаций

class ExpException (

public:

ExpException(ErrorCode NewErrorCode,

const char* NewReason -= NULL) TheError(NewErrorCode), strTheReason(NewReason) ( )

void SetErrorCode(ErrorCode NewErrorCode)

( TheError = NewErrorCode; ) void SetReason(const strings strNewReason)

{ strTheReason == StrNewReason; )