Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Van111
210 / 189 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
#1

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

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

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

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

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

Обработка исключений - C++
Подскажите пожалуйста как продолжить выполнение программы после срабатывания оператора catch. catch завершает программу, но ее нужно...

Обработка исключений - C++
Почему не перехватывает ошибку и не выводит Error? а прога сама прекращает работу. #include <iostream> using namespace std; ...

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

Обработка исключений - C++
Как сделать обработку исключения так, чтобы, если, например, вводим количество координат больше, чем можно, программа предлагала, или...

11
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 1
28.12.2011, 16:16 #2
Van111, о чём вы? Исключения обрабатываются там, где они по логике вещей должны обрабатываться. Никаких специальных классов для обработки создавать не надо, конструкции try/catch для этих целей пока хватало сполна.
1
OLLEGATOR
Linux-оид
116 / 65 / 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<<"Мы отловили ошибку!";
 
    }
 
}
0
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 1
28.12.2011, 16:36 #4
OLLEGATOR, я, конечно, вопрос не очень понял, но сомневаюсь, что ваш код является ответом на него.
0
OLLEGATOR
Linux-оид
116 / 65 / 3
Регистрация: 15.02.2011
Сообщений: 353
28.12.2011, 16:37 #5
ну я хоть попытался...
0
fasked
Эксперт С++
4957 / 2537 / 180
Регистрация: 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
210 / 189 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 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
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 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
Эксперт С++
4957 / 2537 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.12.2011, 17:35 #10
Цитата Сообщение от silent_1991 Посмотреть сообщение

Не по теме:

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

Не по теме:

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

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

Не по теме:

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

0
Van111
210 / 189 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 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
Привет! Вот еще темы с ответами:

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

Обработка исключений - C++
Нужно описать класс исключения и программу, способную генерировать и обрабатывать исключение (должна содержать блоки try, catch, throw)....

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

Обработка исключений - C++
Добрый вечер. Нужно обработать 5 исключений, я 3 обработал(и то мб неверно), а другие не могу придумать пока. Вот код: #include...


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

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

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