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

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

Войти
Регистрация
Восстановить пароль
 
Нач_физик
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 49
#1

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

11.05.2011, 22:25. Просмотров 272. Ответов 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
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++):

Исключения, возврат кодов ошибок, assert и 1 вопрос про исключение. - C++
Как правильно выбирать в какой ситуации применять то, а в какой другое? Есть, конечно, очевидные ситуации, например, не открывается файл,...

Исключения - C++
Надо сделать исключение в программе. У меня есть список. Есть методы добавить в конец списка, в начало списка, удалить елемент который...

Исключения - C++
Как бросить исключение выхода за границы массива? Как его поймать? Что делать после отбрасывания? TItem &amp; TArray::operator (unsigned...

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

исключения - C++
программа реализует проверку на двоичное число: #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; //класс исключений ...

Исключения - C++
Упражняюсь в программировании. Написал абстрактный класс Shape, от которого наследуются Quadr и Treyg. Создал класс исключения Exeption,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
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
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
11.05.2011, 22:46 #4
Это не конструктор, а создание временного объекта без указания имени.
В конструкторе указывается имя типа, а здесь просто значение.
Конструктор:
ValException(int i)
Временный объект:
ValException(i)
Разная запись.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2011, 22:46
Привет! Вот еще темы с ответами:

исключения - C++
Есть тестовое задание. Реализовать класс. Есть метод. * @note The function does not validate the index, if the index is out ...

Исключения - C++
читаю про исключения, сама концепция понятна, но стоит ли вообще заострять на исключениях своё внимание? например описан класс exception,...

Исключения - C++
Помогите реализовать класс исключения в данном коде. Задание: Реализуемая функция должна генерировать подходящие исключения. Обработку...

исключения - C++
Помогите пожалуйста создать мнoгoурoвнeвую иeрaрхию нaслeдoвaния клaссoв исключeния для сoздaния ситуaции, в кoтoрoй вaжнa...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.05.2011, 22:46
Ответ Создать тему
Опции темы

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