|
Программирование >> Программирование на языке c++
cout \nEnter index: ; cin index; cout str[index]; } } при ошибочном значении индекса акти-catch(string::range) визируется этот обработчик исключения { cout wrong index\n ; } вывод сообщения: wrong index } завершение программы Последовательность действий, возникающих в программе при генерации и обработке исключения, показана на рис. 7.1 (см. последовательность операций а, Ь, с, d). Здесь обработчик исключения позволяет завершить при необходимости или при ошибке бесконечный цикл for(;;). Таким образом, мы можем рассматривать обработку исключений как обработку ошибочных ситуаций (в этом случае мы предполагаем, что бесконечный цикл будет завершаться при ошибке), а также как некоторые новые управляющие структуры (например, позволяющие завершить, в случае необходимости, наш бесконечный цикл). Вторая программа содержит глобальный класс-индикатор исключения range. #include <iostream.h> class range { }; глобальный класс индикатор исключения class string { char* pointer to string; unsigned size; public: string(unsigned SIZE) { pointer to string = new char(size=SIZE); } -StringO { delete pointer to string; } char& operator[](int); char& string::operator[](int j) { if ((j<0)(j>=size)) throw ::range(); :: - указывает на то, что range - return pointer to string[j]; } это глобальный класс void main{void) { int index.ss; cout << Enter the size: ; введите размер строки cin ss; string str{ss); описание объекта str с размером ss for(int i=0;i<ss;i++) str[i]=i-l-A; try { for(;;) { cout \nEnter index: ; cin index; cout str[index]; } catch(range) здесь используется глобальный класс range { cout wrong index\n ; } Bee действия программы должны быть ясны из предыдущих пояснений и рис. 7.1. Третья программа демонстрирует использование двух обработчиков исключений и двух индикаторов исключений, один из которых - глобальный, а другой - локальный. #include <iostream.h> #include <stdlib.h> для функции exit const int ss=lO; class range {}; class string { char* pointer to string; unsigned size; int i; переменная, используемая как счетчик ошибок public: string(unsigned SIZE) : i{0) { pointer to string = new char(size=SIZE); } ~string{) { delete pointer to string; } class range {}; char& operator[l(int); char& string::operator[](int j) { if(i>3) throw ::range(); установка глобального индикатора if {(j<0)l{j>=size)) { i++; throw range(); } установка return pointer to string[j]; } локального индикатора void main(void) { int index; string str(ss); for(int i=0;i<ss;i++) str[i]=i+A; for(;;) { try { for{;;) { cout \nEnter index: ; cin index; cout str[index]; } catch(range) первый обработчик исключения { cout too many errors\n ; exit(O); } catch(string::range) второй обработчик исключения { cout << wrong index\n ; } cout try again\n ; повторение итерации цикла Здесь при активизации первого обработчика исключений осуществляется завершение программы (см. функцию exit). При активизации второго обработчика после его завершения выполняется очередная итерация нашего бесконечного цикла. Четвертая программа использует три вложенных класса и один внешний класс для индикации исключительных ситуаций. Соответственно в программе заданы четыре обработчика исключений. #include <iostream.h> #include <stdlib.h> #define ss 10 class range {};
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |