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