290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
1

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

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

Студворк — интернет-сервис помощи студентам
можете пожалуйста привести пример ,как внутри функции класса обрабатывать исключительные ситуации(я не понимаю как должен выглядеть и где должен находится специальный класс в котором будет записана эта самая обработка ситуаций)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2011, 15:55
Ответы с готовыми решениями:

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

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

Обработка исключений
Помогите написать программу пожалуйста!!!! Я незнаю как правильно написать!!! Задание: Для...

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

11
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.12.2011, 16:16 2
Van111, о чём вы? Исключения обрабатываются там, где они по логике вещей должны обрабатываться. Никаких специальных классов для обработки создавать не надо, конструкции try/catch для этих целей пока хватало сполна.
1
Linux-оид
120 / 69 / 9
Регистрация: 15.02.2011
Сообщений: 374
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
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.12.2011, 16:36 4
OLLEGATOR, я, конечно, вопрос не очень понял, но сомневаюсь, что ваш код является ответом на него.
0
Linux-оид
120 / 69 / 9
Регистрация: 15.02.2011
Сообщений: 374
28.12.2011, 16:37 5
ну я хоть попытался...
0
Эксперт С++
5042 / 2621 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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, мне кажется, каждый разработчик стл всегда носит с собой карманный обфускатор, даже когда спит, хранит его под подушкой :D

0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 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
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
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
Эксперт С++
5042 / 2621 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
28.12.2011, 17:35 10
Цитата Сообщение от silent_1991 Посмотреть сообщение

Не по теме:

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

Не по теме:

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

0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.12.2011, 17:37 11
fasked, ну тут в принципе да)) я про библиотеку в целом))

Не по теме:

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

0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
28.12.2011, 18:43  [ТС] 12
всем спасибо
0
28.12.2011, 18:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.12.2011, 18:43
Помогаю со студенческими работами здесь

Обработка исключений
Необходимо создать три массива a, b и с размерами соответственно n1, n2 и n3 (n1=!n2=!n3). В массив...

Обработка исключений
Здравствуйте, вопрос: В функцию передается ссылка на элемент массива, необходимо предусмотреть...

Обработка исключений
Программа должна содержать блоки try, catch, точку throw. Задание: Ввод пользователем...

Обработка исключений
Есть код программы по поиску совершенных чисел а интервале от a до n. #include &lt;iostream&gt; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru