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

Исключения:: вопрос - C++

Восстановить пароль Регистрация
 
Нач_физик
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 49
11.05.2011, 22:25     Исключения:: вопрос #1
Прошу консультации по теоретическому вопросу.

Фрагмент кода
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
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <time.h>
using namespace std;
 #include <windows.h>
 
//**************** Класс исключения "выход за пределы индексов массива"***
class ValException
{
           public:
             int idx;
             ValException(int i)         //конструктор
             {
               idx = i;
             }
};
    void SetValue(double val,int i,int n, double a[] )
  {
 
        if (val+1 < -1 || val+1 > 1) //аргументы выходят за пределы границ
       {
        a [i] =0.0;
        throw ValException(i);
        }
 
         a [i] =asin(val+1);           // нормальная ситуация
 
 }
int main(int argc, char *argv[])
{
    
    const int n1=25;
    double a [n1];
    double x = -3.0;
    for (int i=0; i<n1;i++,x+=0.2)
     {
          try
            {
                SetValue(x,i,n1,a);    //  пытаемся сформировать массив
     cout<<"Значение аргумента в диапазоне [-1 1]  "<<i<<endl;
             }
 
        catch  (ValException ex) //перехват исключений
            {
               cout<<"Выход аргументов из интервала -1..1 " <<ex.idx<<endl;
             }
        }
       system("PAUSE");
    return EXIT_SUCCESS;
}
Собственно вопрос: строка
C++
1
2
 
throw ValException(i)
Правильно ли я понимаю-throw вызывает конструктор класса ValException с параметром (i)? А разве может не член класса вызвать конструктор? И что происходит ? создается обект? А имя объекта где? в catch передается обект ех класса ValException, а кто его создаети самое главное кто имя то ему присваивает?
И ещё, по условию задачи при возникновении исключения в а[i] должно быть записан ноль , првильно ли выполнена операция, или по правилам это должно происходить в блоке catch (ValException ex) ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2011, 22:25     Исключения:: вопрос
Посмотрите здесь:

Исключения C++
C++ исключения
C++ Исключения, возврат кодов ошибок, assert и 1 вопрос про исключение.
C++ Исключения
C++ Исключения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
11.05.2011, 22:29     Исключения:: вопрос #2
Создается объект класса ValException. Строка throw ValException(i) означает тоже самое, что
C++
1
2
ValException ve(i);
throw ve;
Нач_физик
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 49
11.05.2011, 22:37  [ТС]     Исключения:: вопрос #3
Ни разу не понятно- ValException ve(i); это понятно создается обект с именем ve. А вот throw ValException(i); не понятно - это не вызов конструктора , это ,допустим, генерация исключения с конструктором ValException(i), где имя то ? Ведь в catch (ValException ex) имя то уже есть? Если бы было catch (ValException& ex) нет вопросов.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
11.05.2011, 22:46     Исключения:: вопрос #4
Это не конструктор, а создание временного объекта без указания имени.
В конструкторе указывается имя типа, а здесь просто значение.
Конструктор:
ValException(int i)
Временный объект:
ValException(i)
Разная запись.
Yandex
Объявления
11.05.2011, 22:46     Исключения:: вопрос
Ответ Создать тему
Опции темы

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