Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Van111
211 / 190 / 22
Регистрация: 03.08.2011
Сообщений: 2,648
Записей в блоге: 12
#1

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

28.12.2011, 15:55. Просмотров 2518. Ответов 11
Метки нет (Все метки)

можете пожалуйста привести пример ,как внутри функции класса обрабатывать исключительные ситуации(я не понимаю как должен выглядеть и где должен находится специальный класс в котором будет записана эта самая обработка ситуаций)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2011, 15:55
Я подобрал для вас темы с готовыми решениями и ответами на вопрос классы и обработка исключений (C++):

Обработка исключений с пмощью структурированной обработки исключений
Есть функция, которая определенным образом работает с файлами,но при работе с...

Классы исключений
расскажите, пожалуйста, про предопределенные классы исключений

Обработка исключений
класс B является производным от абстрактного класса А. Определить обработчик...

Обработка исключений
Уважаемые админы. Знаю, что о помощи надо просить, когда имеются хоть какие-то...

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

Обработка исключений
Здравствуйте! Есть вот такое выражение: Подскажите пожалуйста, как...

11
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
28.12.2011, 16:16 #2
Van111, о чём вы? Исключения обрабатываются там, где они по логике вещей должны обрабатываться. Никаких специальных классов для обработки создавать не надо, конструкции try/catch для этих целей пока хватало сполна.
1
OLLEGATOR
Linux-оид
117 / 66 / 9
Регистрация: 15.02.2011
Сообщений: 374
Завершенные тесты: 1
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<<"Мы отловили ошибку!";
 
    }
 
}
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
28.12.2011, 16:36 #4
OLLEGATOR, я, конечно, вопрос не очень понял, но сомневаюсь, что ваш код является ответом на него.
0
OLLEGATOR
Linux-оид
117 / 66 / 9
Регистрация: 15.02.2011
Сообщений: 374
Завершенные тесты: 1
28.12.2011, 16:37 #5
ну я хоть попытался...
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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];
      }
1
silent_1991
28.12.2011, 16:58
  #7

Не по теме:

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

0
Van111
211 / 190 / 22
Регистрация: 03.08.2011
Сообщений: 2,648
Записей в блоге: 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;
              }
          }
как это всё склеить в рабочий код?
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 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;
}
2
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.12.2011, 17:35 #10
Цитата Сообщение от silent_1991 Посмотреть сообщение

Не по теме:

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

Не по теме:

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

0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
28.12.2011, 17:37 #11
fasked, ну тут в принципе да)) я про библиотеку в целом))

Не по теме:

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

0
Van111
211 / 190 / 22
Регистрация: 03.08.2011
Сообщений: 2,648
Записей в блоге: 12
28.12.2011, 18:43  [ТС] #12
всем спасибо
0
28.12.2011, 18:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2011, 18:43
Привет! Вот еще темы с решениями:

Обработка исключений
Почему не перехватывает ошибку и не выводит Error? а прога сама прекращает...

Обработка исключений
что то я не пойму а что в плюсах нельзя разве сделать что то типа: try {...

обработка исключений
Есть вот такой код: #include &lt;iostream&gt; #include &lt;fstream&gt; using...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru