Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию