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

классы и обработка исключений - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
28.12.2011, 15:55     классы и обработка исключений #1
можете пожалуйста привести пример ,как внутри функции класса обрабатывать исключительные ситуации(я не понимаю как должен выглядеть и где должен находится специальный класс в котором будет записана эта самая обработка ситуаций)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2011, 15:55     классы и обработка исключений
Посмотрите здесь:

Обработка исключений C++
C++ обработка исключений
Обработка исключений с пмощью структурированной обработки исключений C++
Обработка исключений C++
Обработка исключений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.12.2011, 16:16     классы и обработка исключений #2
Van111, о чём вы? Исключения обрабатываются там, где они по логике вещей должны обрабатываться. Никаких специальных классов для обработки создавать не надо, конструкции try/catch для этих целей пока хватало сполна.
OLLEGATOR
Linux-оид
 Аватар для OLLEGATOR
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
28.12.2011, 16:30     классы и обработка исключений #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
#include <iostream>
 
using namespace std;
 
int main()
{
 
 
    try{
 
        int *a=new int[25];
 
        for(int i=0;i<29;i++)
            a[i]=25;  // Пробуем достучаться к эллементу которого нет ..эту ошибку и вылавим...
 
            delete [] a;
 
    }
    catch(...){ // Под любую ошибку...
 
         cout<<"Мы отловили ошибку!";
 
    }
 
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.12.2011, 16:36     классы и обработка исключений #4
OLLEGATOR, я, конечно, вопрос не очень понял, но сомневаюсь, что ваш код является ответом на него.
OLLEGATOR
Linux-оид
 Аватар для OLLEGATOR
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
28.12.2011, 16:37     классы и обработка исключений #5
ну я хоть попытался...
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.12.2011, 16:45     классы и обработка исключений #6
Выдержка из std::vector g++. Так бросают исключения профессионалы
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
37
38
39
40
41
42
43
44
45
    protected:
      /// Safety check used only from at().
      void
      _M_range_check(size_type __n) const
      {
        if (__n >= this->size())
          __throw_out_of_range(__N("vector::_M_range_check"));
      }
 
    public:
      /**
       *  @brief  Provides access to the data contained in the %vector.
       *  @param n The index of the element for which data should be
       *  accessed.
       *  @return  Read/write reference to data.
       *  @throw  std::out_of_range  If @a n is an invalid index.
       *
       *  This function provides for safer data access.  The parameter
       *  is first checked that it is in the range of the vector.  The
       *  function throws out_of_range if the check fails.
       */
      reference
      at(size_type __n)
      {
        _M_range_check(__n);
        return (*this)[__n];
      }
 
      /**
       *  @brief  Provides access to the data contained in the %vector.
       *  @param n The index of the element for which data should be
       *  accessed.
       *  @return  Read-only (constant) reference to data.
       *  @throw  std::out_of_range  If @a n is an invalid index.
       *
       *  This function provides for safer data access.  The parameter
       *  is first checked that it is in the range of the vector.  The
       *  function throws out_of_range if the check fails.
       */
      const_reference
      at(size_type __n) const
      {
        _M_range_check(__n);
        return (*this)[__n];
      }
silent_1991
28.12.2011, 16:58
  #7

Не по теме:

fasked, мне кажется, каждый разработчик стл всегда носит с собой карманный обфускатор, даже когда спит, хранит его под подушкой

Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
28.12.2011, 17:19  [ТС]     классы и обработка исключений #8
Бьерн Страуструп Язык программирования с++ второе издание
страница 54-55

C++
1
2
3
4
5
 class vector {
           // определение типа возможных особых ситуаций
         class range { };
           // ...
         };
C++
1
2
3
4
5
int & vector::operator [] ( int i )
        {
          if ( i < 0 || sz <= i ) throw range ();
          return v [ i ];
        }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 void f ( int i )
          {
              try
              {
              // в этом блоке обрабатываются особые ситуации
              // с помощью определенного ниже обработчика
              vector v ( i );
              // ...
              v [ i + 1 ] = 7;  // приводит к особой ситуации range
              // ...
              g ();         // может привести к особой ситуации range
                            // на некоторых векторах
              }
              catch ( vector::range )
              {
                  error ( "f (): vector range error" );
                  return;
              }
          }
как это всё склеить в рабочий код?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.12.2011, 17:28     классы и обработка исключений #9
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
 
class Array
{
public:
    class OutOfRangeException : public std::exception
    {
    public:
        OutOfRangeException()
        {
        }
 
        virtual ~OutOfRangeException() throw()
        {
        }
 
        const char *what() const throw()
        {
            return "Out of range!";
        }
    };
 
public:
    Array(size_t size):
    m_size(size),
    m_array(new int[m_size]())
    {
    }
 
    ~Array()
    {
        delete[] m_array;
    }
 
    size_t size() const
    {
        return m_size;
    }
 
    int& operator[](size_t index)
    {
        if (index >= m_size)
            throw OutOfRangeException();
 
        return m_array[index];
    }
 
    const int& operator[](size_t index) const
    {
        if (index >= m_size)
            throw OutOfRangeException();
 
        return m_array[index];
    }
 
private:
    size_t m_size;
    int *m_array;
};
 
int main()
{
    Array arr(10);
 
    try
    {
        for (size_t i = 0; i < arr.size(); ++i)
            arr[i] = i + 1;
 
        for (size_t i = 0; i < arr.size() + 1; ++i)
            std::cout << arr[i] << "  ";
    }
    catch (const Array::OutOfRangeException &ex)
    {
        std::cerr << ex.what() << std::endl;
    }
 
    return 0;
}
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.12.2011, 17:35     классы и обработка исключений #10
Цитата Сообщение от silent_1991 Посмотреть сообщение

Не по теме:

fasked, мне кажется, каждый разработчик стл всегда носит с собой карманный обфускатор, даже когда спит, хранит его под подушкой

Не по теме:

Да вполне читабельно. Здесь для каждого стандартного исключения есть обертка, принимающая строку what и бросающая это самое исключение Вот __N только не знаю что такое.

silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.12.2011, 17:37     классы и обработка исключений #11
fasked, ну тут в принципе да)) я про библиотеку в целом))

Не по теме:

Чёрт, вот надо ж так, забыл в свой код конструктор копии и оператор присваивания добавить...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2011, 18:43     классы и обработка исключений
Еще ссылки по теме:

Обработка исключений C++
Обработка исключений C++
C++ Классы исключений

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
28.12.2011, 18:43  [ТС]     классы и обработка исключений #12
всем спасибо
Yandex
Объявления
28.12.2011, 18:43     классы и обработка исключений
Ответ Создать тему
Опции темы

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