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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Программным кодом, вызывающим try-блок. Пусть ExeptionType имя класса,





Тогда 108яХыыкод

try{

Do_something();

}

catch(ExeptionType){

//.....

Throw ExeptionType();

}

Не приводит к возникновению бесконечного цикла. Обработчики ситуаций

Могут быть вложенными. Например,

try {

//.....

}

catch(type) {

try {

// код, в котором возможно

// возникновение ситуации типа type

}

catch(type) {

//.....

}

}

(Объясните, почему не происходит зацикливания в этом примере). Заметим, что

Такой стиль программирования усложняет понимание программного кода и его

Следует избегать.

Обычно исключение не только сигнализирует об ошибке, но и содержит

Некоторую информацию о происшедшем. Например, при нарушении

индексации полезно передать значение индекса, вызвавшее ситуацию:

class Vector {

//.....

public:

class Range{

public:

Int index;

Range(int i): index(i){}

};

//.....

int& operator[](int);

//.....

};

int& Vector::operator[ ](int i) {

if(i < lbound || ubound < i) throw Range(i);

else return v[i-lbound];

}

void f(Vector& v) {

//.....

try{

Use_vectors(v);

}

catch(Vector::Range r){

cerr << “Bad index: “ << r.index << ‘\n’;

//.....

}

//.....

}

ИСКЛЮЧЕНИЯ В ШАБЛОНАХ.

Рассмотрим пример

template<class T>

class Vector {

private:

T* v;

Int lbound;

Int ubound;

public:

class Range{ };

//...

T& operator[](int) {

if(i < lbound || ubound < i) throw Range();

return v[i-lbound];

};

//...

}; // class Vector

Здесь в шаблоне класса содержится тип, используемый для исключений.

Каким образом это проявляется в параметризованных классах, полученных из

этого шаблона? Очевидно, в каждом таком классе мы имеем свой тип

исключения, для которого должен использоваться свой обработчик:

void f(Vector<int>& vi, Vector<double>& vd) {

try {

//.....

}

catch(Vector<int>::Range) {

//.....

}

catch(Vector<double>::Range) {

//.....

}

}

Если нам требуется использовать один тип исключения для всех

Параметризованных классов, то следует просто сделать класс Range внешним.

ИЕРАРХИЯ ИСКЛЮЧЕНИЙ

Часто исключения естественным образом группируются в семейства.







Date: 2015-12-12; view: 373; Нарушение авторских прав



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