Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Стандартным правилам преобразования указателей
D) встретился обработчик по умолчанию. Обработчик по умолчанию Вызывается для исключения любого типа и имеет вид catch(...){ // тело обработчика } Очевидно, что обработчик по умолчанию должен располагаться Последним среди обработчиков данного try-блока. Рассмотрим пример. Пусть класс Vector должен обнаруживать и сообщать об ошибках двух видов – ошибках индексации и ошибках распределения памяти: class Vector { private: Int lbound, ubound; int *v; public: class Range{}; class Memory{}; //..... Vector(int); int& operator[](int); //..... }; Vector::Vector(int size) { if(!(v=new int[size])) throw Memory(); else { lbound=0; ubound = size-1; } } int& Vector::operator[](int i) { if(i < lbound || ubound < i) throw Range(); else return v[i-lbound]; } Пользователь класса Vector может различить два исключения, включив два обработчика: void f(void) { try{ Use_vectors(); } catch(Vector::Range){ // тело обработчика ошибки индексации } catch(Vector::Memory){ // тело обработчика ошибки выделения памяти } } Если удается пройти обработчик, то выполняется код за обработчиками. Например: Void f(void) { try{ Use_vectors(); // на эту часть кода мы попадаем, // если не возникло исключения при // вызове функции use_vectors() } catch(Vector::Range){ // здесь исправляем индекс // и пытаемся продолжить F(); } catch(Vector::Memory){ cerr << “Memory error. Продолжение невозможно.\n”; Exit(1); } // на эту часть кода мы попадаем, если не возникло // исключения, или после обработчика исключения Range. } Функция не обязана обрабатывать все возможные исключения. Например: void f1(void) { try{ F2(v); } catch(Vector::Memory){ //..... } } void f2(Vector& v) { try{ Use_vectors(); } catch(Vector::Range){ //..... } } Здесь f2() перехватывает ошибки Range в use_vectors() и пропускает ошибки Memory, которые обрабатываются в f1(). Исключение считается обработанным сразу после входа в обработчик. Поэтому исключение, возникающее в обработчике должно обрабатываться Date: 2015-12-12; view: 431; Нарушение авторских прав |