|
Программирование >> Программирование на языке c++
class string { char* pointer to string; unsigned size; public: string(unsigned); ~string() { delete pointer to string; } class range 1 {}; class range2 {}; class гапдеЗ {}; char& operator[](int); char& string::operator[](int j) { if (j<0) throw ::range(); if (j>=size) throw range3{); ((J<2)(j>size-2)) throw range2(); if {{J<4)li{j>size-4)) throw range 1(); return pointer to string[j]; string::string(unsigned SIZE) { pointer to string = new char(size=SIZE); for (int i=0;i<size;i+-l-) pointer to string[i] = i + 0; void main(void) { string str(ss); int index; for(;;) . { try { for(;;) { cout \nEnter index: ; cin index; cout strpndex]; } catch(range) { cout index < 0\n ; обработчик 1 cout termination\n ; exit(1); } catch(string::range1) обработчик 2 { cout index: <4 or size-4>\n ;} catch(string::range2) обработчик 3 { cout index: <2 or size-2>\n ;} catch(string::range3) обработчик 4 { cout index: size>\n ; } cout try again\n ; } Здесь в первом обработчике осуществляется завершение программы (см. функцию exit). После выполнения каждого последующего обработчика (2, 3 или 4) повторяется очередная итерация цикла, т. е. если, например, активизирован обработчик 3, то после его завершения начинает выполняться следующая итерация (появляется сообщение Enter index: ). Последняя программа показывает возможный вызов в обработчике исключения функции, содержащей блоки try и catch. Это можно делать, например, когда возникшая ошибка не является опасной. В результате ее можно исправить и повторить соответствующие операции. #include <iostream.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); char& string::operator[](int j) { if ((j<0)(j>=size)) throw rangeO; return po(nter to str(ng[j]; } string::string(unsigned SIZE) { pointer to string = new char(size=SIZE); for (int i=0;i<size;i++) pointer to string[i] = i + О; ] void f(void) функция с блоками try и catch { string str{ss); int index; try { cout \nEnter index: ; cin index; cout str[index]; catch(string::range) { cout wrong index\n ; } новая попытка void nnain(void) { f(); } Bee действия в программе были пояснены выше. 7.2. Определение типа исключений Во время выполнения программы в ней могут возникать различные ошибки, которые можно сопоставить с исключениями с различными именами. Например, для класса string можно рассмотреть два типа возможных ошибок: неправильное значение индекса и невозможность конструирования объекта этого класса из-за того, что задан очень большой размер строки: #define max 1000 class string { char* pointer to string; unsigned size; public: class range { }; ошибка индекса class sz { }; ошибка размера string(unsigned s); -stringO; char& operator[](int);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |