Форум программистов, компьютерный форум CyberForum.ru

Разъясните подробно, как работают Try-catch - C++

Восстановить пароль Регистрация
 
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
11.03.2014, 18:44     Разъясните подробно, как работают Try-catch #1
Добрый вечер, форумчане! Такая просьба - разъясните нубасу(то бишь мне) подробно как работает try catch throw или киньте ссылки, где это объясняется. По гуглу шарилась, но, увы, мой мозг не был удостоен понимания этого.
Если можно - с примерами и комментариями. Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2014, 18:44     Разъясните подробно, как работают Try-catch
Посмотрите здесь:

C++ Разъясните как чайничку :)
разъясните,пожалуйста, как это сделать? C++
C++ Не понимаю как сделать try/catch в программе
C++ как работает try, catch
C++ Объясните пожалуйста, как работать с try catch и throw
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
11.03.2014, 18:54     Разъясните подробно, как работают Try-catch #2
Тамика, как на счет отправиться в поиск по форуму вот этой темы: Try..catch..Throw

Или в чем именно вопрос?
Progers
New to C++
 Аватар для Progers
83 / 44 / 5
Регистрация: 14.01.2013
Сообщений: 258
11.03.2014, 18:57     Разъясните подробно, как работают Try-catch #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
using namespace std;
class test
{
private:
    int in[10];
public:
    class error{}; // Класс для исключения или ошибки...
    void get() //метод класса
    {
        for(int a = 0;a <= 10; a++)
        {
            in[a] = a;
            if(a >= 10)
            {
                throw error(); //Говорим об ошибке если (a) будет больше 10
            }
        }
    }
};
 
int main()
{
    try // блок повторении(проверка)
    {
        test t1;
        t1.get();
    }
    catch(test::error) // Ловим ошибку
    {
        cerr << "Error"; // выводим на экран ошибке
    }
 
    return 0;
}
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
11.03.2014, 19:04  [ТС]     Разъясните подробно, как работают Try-catch #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Или в чем именно вопрос?
Сейчас перечитаю всё и задам, если не пойму. Спасибо.

Добавлено через 5 минут
Блин. Вот убейте, но не могу понять.
throw - что делает этот оператор? И почему catch() реагирует на throw? Как они связаны между собой?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
11.03.2014, 19:08     Разъясните подробно, как работают Try-catch #5
Цитата Сообщение от Тамика Посмотреть сообщение
throw - что делает этот оператор?
throw (от англ. бросать) - бросает исключение. Генерирует. Создает вот прям сейчас.
Цитата Сообщение от Тамика Посмотреть сообщение
почему catch() реагирует на throw?
Так его задумка такая. Ждать пока/если возникнет исключение и поймать его, то ест обработать.

Они созданы друг для друга.
DrOffset
6426 / 3800 / 880
Регистрация: 30.01.2014
Сообщений: 6,594
11.03.2014, 19:32     Разъясните подробно, как работают Try-catch #6
Цитата Сообщение от Тамика Посмотреть сообщение
throw - что делает этот оператор? И почему catch() реагирует на throw? Как они связаны между собой?
throw создает временный объект, объект исключения, в специальной области памяти (особенности этой памяти не регламентированы, зависят от реализации), главное ее назначение - сохранить объект исключения пока будет раскручиваться стек.
После того как объект исключения сохранен, поток управления начинает работать в обратном направлении, пока не будет достигнуто начало блока try. В этом месте параметры определенных нами catch блоков начинаются сравниваться с сохраненным исключением, чтобы определить совпадение. Если совпадения не найдено, то поток управления продолжает разматывать стек до следующего блока try и т.д. Если блок try не был найден, то срабатывает глобальный обработчик, который вызывает std::terminate(). Если совпадение найдено, поток управления переходит к соответствующему catch блоку (обработчику исключений), который выполняется как обычно. В процессе раскрутки стека вызываются в порядке обратном созданию деструкторы всех автоматических объектов, которые были к тому моменту полностью созданы.
Yandex
Объявления
11.03.2014, 19:32     Разъясните подробно, как работают Try-catch
Ответ Создать тему
Опции темы

Текущее время: 17:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru