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

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

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

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

11.05.2011, 22:25. Просмотров 269. Ответов 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     Исключения:: вопрос
Посмотрите здесь:

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

Исключения - C++
Здравствуйте, у меня есть немножко глупый вопрос: есть скажем функция a() { some code } Все равно поместить саму функцию а() в...

Исключения - C++
Помогите пожалуйста с программой, ибо чё-то не даётся мне этот try... catch . Собственно задача: Вычислите 1/х как число с плавающей...

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

Исключения - C++
Никак не могу понять, как работают исключения в С++. Может быть кто-нибудь сможет объяснить на примере деления на 0. Исключения должны быть...

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

исключения - C++
скажите пожалуйстокак написать через исключение if(n&lt;=0 || n&gt;=100000000) { fclose(f); f=fopen(&quot;output.txt&quot;, &quot;w&quot;); ...

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

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

Исключения С++ - C++
С++. Перечитал уже много учебников, видел много примеров, но никак не пойму как пользоваться блоками try catch.. Может хоть кто-нибудь...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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)
Разная запись.
Yandex
Объявления
11.05.2011, 22:46     Исключения:: вопрос
Ответ Создать тему
Опции темы

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