Программирование >>  Программирование на языке c++ 

1 ... 96 97 98 [ 99 ] 100 101 102 ... 159


return х*у;

void f(double z) переопределенная функция f, которая ге-{ if (z>700000.0) throw z; } нерирует другое исключение void main(void) { double A,B;

17 { начало внешнего блока

try { cout A,B?:\n ; начало вложенного

блока

cin A В; f(A); f(B);

cout A*B = f(A,B) endl; } конец вложенного блока обработчик исключения для вложенного блока catch(double v) { cout termination\n ; exit(1); } for(;;) { cout Enter A,B:\n ; cin A B;

cout A*B = f(A,B) endl;

} конец внешнего блока

catch(...) обработчик исключения для вложенного { abort(); } и внешнего блоков

Если в программе возникает исключение для вложенного блока try (введите для этих целей, например, значения 700001 и 1), то на экране появляется сообщение termination, и программа завершает работу. Если во вложенном блоке ввести значения, для которых выполняется условие х+у> 1000000.0, то управление будет передано обработчику catch(...). Этот обработчик выводит сообщения overflowing (см. конструктор для структуры overflow) и Abnormal program termination (см. функцию abort). Процесс активизации исключений во внешнем блоке try рассматривался выше (здесь управление может быть передано только обработчику catch(...)).

Пятая программа показывает, как переопределить заданную по умолчанию функцию unexpected.



#include <except.h> #include <iostream.h> #include <stdlib.h> #define ss 10 class string {

char* pointer to string;

unsigned size; public:

string(unsigned);

-StringO { delete pointer to string; } class range {};

char& operator[](int) throw(string::range);

char& string::operator[](int j) throw(string::range) { if ({j<0)l!(j>=size)) throw range();

if (j==0) throw 0; здесь будет вызвана функция unexpected

return pointer to stringj];

string::string(unsigned SIZE) { pointer to string = new char(size=SIZE); for (int i=0;i<size;i++)

pointer to string[i] = i + 0;

void f(void) { string str(ss); int index;

try { cout \nEnter index: ; cin >> index; cout str[index];

catch(string::range) { cout wrong index\n ;

fO;}

void my unexp(void) описание новой функции unexpected



{ cout my unexp\n ; exit(1); } void main(void)

{ set unexpected(my unexp); регистрация новой f(); } функции unexpected

Если в приведенную программу ввести значение О, то автоматически вызывается функция my unexp (вместо стандартной функции unexpected). В результате выводится сообщение my unexp (см. функцию my unexp) и программа заверщает работу.

Шестая программа показывает, как переопределить заданные по умолчанию функции terminate и unexpected. #include <except.h> #include <iostream.h> #include <stdlib.h> #define ss 10 class string {

char* pointer to string;

unsigned size; public:

string(unsighed);

-StringO { delete pointer to string; } class range {};

char& operator[](int) throw(string::range,int);

char& string::operator[](int j) throw(string;:range,int) { if ((j<0)ll(j>=size)) throw rangeO;

if {j==0) throw 0; введите 0, чтобы вызвать функцию terminate

if (j==1) throw size ; введите 1, чтобы вызвать

unexpected return pointer to string[j];

string::string(unsigned SIZE) { pointer to string = new char(size=SIZE); for (int i=0;i<size;i-b-b)

pointer to string[i] = i + 0;



1 ... 96 97 98 [ 99 ] 100 101 102 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика