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

1 ... 91 92 93 [ 94 ] 95 96 97 ... 159


char* pointer to string; unsigned size; public:

string(unsigned);

-StringO { delete pointer to string; } class sz {}; индикатор ошибки при

конструировании объекта class range {}; индикатор ошибки индекса char& operator[](int);

char& string::operator[](int j) { if ({J<0)!!{j>=si2e)) throw range(); return pointer to string[j];

string::string(unsigned SIZE)

{ if (SIZE>m) throw szO; unsigned SIZE не должен быть

меньше О pointer to string = new char(size=SIZE); for(int i=0;i<size;i++) pointer to string[i]=i+0;

void main(void) { try{

string str(ss);

выполнение каких-то действий с объектом str

catch(string::sz) { cout constructors error\n ; exit{1); } string str(5); int index; try {

cout \nEnter index: ;

cin index;

cout str[index]; } catch(string::range) { cout \nrange error\n ; } cout << \nprogram termination\n ;



В первой программе использован глобальный класс sz, а во второй - локальный класс sz.

7.3. Получение дополнительной

информации об исключении

При необходимости можно получить дополнительную информацию об исключении, например узнать значение ошибочного индекса. Передача такой информации производится через дополнительные поля, которые указываются в классе-индикаторе исключения. Действительно, взаимосвязь между генератором сигнала исключения (throw) и обработчиком исключения (catch) осуществляется через класс-индикатор (например, range). Однако вся необходимая информация передается в обработчик исключения с помощью соответствующего объекта (например, объекта класса range). Рассмотрим пример:

class string {

char* pointer to string;

unsigned size;

public:

class range { public:

unsigned i;

range(unsigned s) : i(s) { }

char& operator[](int);

..................... };

char& string::operator[](int s) { if((s<0)(s>size)) throw range(s);

return pointer to string[i]; }

Теперь в выражении throw range(s) в поле i объекта класса range будет записано значение ошибочного индекса s.

Для того чтобы в обработчике исключения проанализировать значение ошибочного индекса, необходимо задать имя объекту - индикатору исключения:

try {.....................}



catch(string::range ob) {

cerr << неверный индекс; ob.i endl;

..................... }

Выражение (string: :range ob) объявляет тип допустимого параметра (в примере string::range) и может дополнительно задавать имя для заданного типа (в примере ob).

Рассмотрим пример, в котором в классе range - индикаторе исключения задается переменная i с атрибутом private, получающая значение ошибочного индекса, и две функции get index() и index range() с атрибутом public, которые соответственно возвращают значение ошибочного индекса и дают диапазон допустимых индексов.

#include <iostream.h> #include <stdlib.h> #define ss 10

class string {

char* pointer to string; public:

int size;

string(int);

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

int i;

int s;

public:

range(int l,int S) : i(l),s(S) {} get index() { return i; } i - ошибочный

индекс

void index range() возвращает диапазон допустимых индексов { cout О - s endl; }

char& operatorUimt);

char& string::operator[](int j)

{ if ((j<0)l(j>=size)) throw range(j,size);



1 ... 91 92 93 [ 94 ] 95 96 97 ... 159

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