всегда возможно. Рассмотрим функцию, суммирующую список целых значений. В 
этом случае все возвращаемые значения мoгут быть допустимыми, и невозможно 
зарезервировать одно из них для особого случая. Большинство программистов 
решают эту проблему, определяя глобальную переменную-флаг для ошибок, которая 
должна проверяться в программе обнаружения ошибок после вызова функции. 
Исключительные ситуации дозволяют отказаться от такого запутанного способа 
обработки ошибок с помощью возврата объектов лредставляющих состояния 
исключительных ситуаций без конфликтов с нормальными возвращаемыми 
значениями функции. 

    Программирование с исключительными ситуациями 

    Пример программы EXCEPT. CPP (листинг 15.16) демонстрирует использование 
исключительных ситуаций ANSI C++. Вы можете скомпилировать и запустить 
программу из DOS или WINDOWS. Из приглашения DOS следует ввести bcc except, а 
затем имя программы для запуска получившегося в результате исполняемого файла 
EXCEPT.EXE. Или же из интегрированной среды скомпилируйте и запустите 
программу в качестве Easy WtH-приложения. 

    ЗАМЕЧАНИЕ 

    Для демонстрации в модуле ЕХСЕРТ.СРР имеется оператор, который не 
выполняет никаких действий, что служит причиной предупреждений компилятора 
"Unreachabte code at line 78" (Недостижимый код в строке 78). Я включил этот 
оператор throw для отладки. Если вы сделаете ошибку, модифицировав программу 
(конечно, она хранится на диске, и вы не должны этого делать), оператор throw 
в строке 78 создаст объект класса Error с помощью вызова конструктора по 
умолчанию. Изучите объявление класса. Созданный таким способом, объект 
Error отобраажит сообщение, свидетельствующее об ошибке в исходном коде. 


    Листинг 15.16.  EXCEPT.CPP (использование исключительных ситуаций ANSI C++) 

    1:	// Демонстрация исключительных ситуаций ANSI C++ 
    2: 
    3:	#include <iostream.h> 
    4:	#include <math.h> 
    5: 
    6:	// Прототипы функций 
    7:	void Instruct(); 
    8:	double Pow(double b, double e); 
    9:	double Power(double b, double e); 
   10: 
    11:	// Классы исключительных ситуаций 
    12:	class Error { 
    13:	  double b;   // Основание 
    14:	  double e;   // Показатель степени 
    15:	public: 
    16:	   Error() 
    17:	        { cout « "Error in source code!" « endl; } 
    18:	  Error(double bb, double ее) 
    19:	       : b(bb), e(ee) { }
    20:	  void Report(); 
    21:	}; . 
    22: 
    23:	int main() 
    24:	{ 
    25:	Instruct(); 
    26:	try { 
    27:	  double base,  exponent,   result; 
    28:	  cout « "base? "; 
    29:	  cin » base; 
    30:	  cout « "exponent? "; 
    31:	  cin » exponent; 
    32:	  result = Power(base, exponent); 
    33:	  cout « "result == " « result « endl; 
    34:	} 
    35:	catch (ErrorS, e) { 
    36:	  e.Report(); 
    37:	   return -1; 
    38:      } 
    39:      return 0; 
    40:   } 
    41: 


    Глава 15. Передовые средства C++     405 
