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

1 ... 89 90 91 [ 92 ] 93 94 95 ... 159


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);



1 ... 89 90 91 [ 92 ] 93 94 95 ... 159

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