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

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

Восстановить пароль Регистрация
 
каддафи
2 / 2 / 1
Регистрация: 02.10.2012
Сообщений: 91
15.06.2014, 12:02     Добавить выброс исключении #1
Запутался с этими исключениями. Может кто нить добавит мне в код 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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <stack>
#include<cstdlib>
using namespace std;
 const int maxsize = 5;
 class Stack
{
public:
    int var;//znacheniya elementov
    int count;//schetchik
    int max_stack[maxsize];//massiv
    Stack(); // konstruktor
 
    void push();//dobavlenie elementov
    void pop();//udalenie poslednego elementa
    int top();// vivod poslednego elementa
    
    
};
Stack::Stack()
{
    count = 0; 
    var = 0; 
}
 
void Stack::push()
{
if (count==maxsize)
{cout<<"Stek POLNII!!"<<endl;}
else
        max_stack[count++] = var; // dobavlenie v stek
        
        
}
void Stack::pop()
{
    if (count > 0)
     max_stack[--count]; // Udalit iz steka
}
     
int Stack:: top()
     {
         
         if (count>0)
         
         {return max_stack[2];  // vivesti poslednii element
        
         
         }
         else
         return -1;
         }
int main()
{
    
    
int k=0;
Stack d; 
while (k!=4)
{
      
cout<<"-----------------------------"<<endl;
cout<<"Dobavit element           -1-"<<endl;
cout<<"Udalit poslednii element  -2-"<<endl;
cout<<"Vivesti poslednii element -3-"<<endl;
cout<<"Vihod iz programmi        -4-"<<endl;
cout<<"-----------------------------"<<endl;
cout<<"Vvedite komandu:";
cin>>k;
system("CLS");
if (k==1)
{
    cout << "VVedite elementi steka:" << endl;
    cin >> d.var;
    d.push();
}
if (k==2)
{
         
    d.pop();
    cout<<" - UDALENO!!" << endl; // Udalenie poslednego elementa.
}       
if (k==3)
{
        
    cout <<"Poslednii element: "<< d.top() << endl; // Vivod poslednego elementa
    
 
}       
}
        system ("pause");
 
 
    return 0;
}
Добавлено через 26 минут
Или добавьте хотя бы одно исключение. Чтоб я понял как на примере моей программы это будет выглядеть, а я остальное сам доделаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2014, 12:02     Добавить выброс исключении
Посмотрите здесь:

Работа со списком...Не могу добавить функцию добавить элементы в начало списка... C++
C++ Выброс числа во время цикла
БД.Добавить запись C++
C++ Не могу добавить \
C++ Добавить комментарии
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.06.2014, 12:06     Добавить выброс исключении #2
C++
1
2
3
4
5
6
7
void Stack::pop()
{
    if (count > 0)
        max_stack[--count]; // Udalit iz steka
    else 
        throw std::logic_error("empty stack");
}
каддафи
2 / 2 / 1
Регистрация: 02.10.2012
Сообщений: 91
15.06.2014, 12:40  [ТС]     Добавить выброс исключении #3
Tulosba, Спасибо, но не совсем понятно без try и catch.

Добавлено через 29 минут
Вот так сделал, но там ошибки logic_error is not member of std, logic_error has not declareted, invalid catch parametr.

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <stack>
#include<cstdlib>
using namespace std;
 const int maxsize = 20;
 class Stack
{
public:
    int var;//znacheniya elementov
    int count;//schetchik
    int max_stack[maxsize];//massiv
    Stack(); // konstruktor
 
    void push(int);//dobavlenie elementov
    void pop();//udalenie poslednego elementa
    int top();// vivod poslednego elementa
    ~Stack(void);
    
    
};
Stack::Stack(void)
{
    count = 0; 
    var = 0; 
}
Stack::~Stack()
{
               delete[] max_stack;
               
               }
 
void Stack::push(int var)
{
if (count==maxsize)
{cout<<"Stek POLNII!!"<<endl;}
else
        max_stack[count++] = var; // dobavlenie v stek
        
        
}
void Stack::pop()
{
    if (count > 0)
    {
     max_stack[--count]; // Udalit iz steka
     cout<<" - UDALENO!!" << endl; // Udalenie poslednego elementa.
  }
  
 else throw std::logic_error("empty stack");
}
     
int Stack:: top()
     {
         
         if (count>0)
         
         {return max_stack[count-1];  // vivesti poslednii element
        
         
         }
         else
         return -1;
         }
int main()
{
    
    
int k=0;
Stack d; 
while (k!=4)
{
      try
      {
cout<<"-----------------------------"<<endl;
cout<<"Dobavit element           -1-"<<endl;
cout<<"Udalit poslednii element  -2-"<<endl;
cout<<"Vivesti poslednii element -3-"<<endl;
cout<<"Vihod iz programmi        -4-"<<endl;
cout<<"-----------------------------"<<endl;
cout<<"Vvedite komandu:";
cin>>k;
system("CLS");
if (k==1)
{
         int x;
    cout << "VVedite elementi steka:" << endl;
    cin >>x;
    d.push(x);
}
if (k==2)
{
         
    d.pop();
    
}       
if (k==3)
{
        
    cout <<"Poslednii element: "<< d.top() << endl; // Vivod poslednego elementa
    
 
} 
}   
  catch (logic_error)
{
      cout<< "Massiv pustoi"<<endl;
}       
}
 
        system ("pause");
 
 
    return 0;
}
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.06.2014, 12:56     Добавить выброс исключении #4
C++
1
#include <stdexcept>
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
15.06.2014, 13:38     Добавить выброс исключении #5
каддафи,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    try
        {
        if( count > 0 )
            max_stack[--count]; // Udalit iz steka
        else
            throw std::logic_error("empty stack");
            //throw std::string( "empty" );
        }
    catch( logic_error log_err)
        {
            cout << log_err.what();
        }
    //catch( std::string err_text )
    //  {
    //  std::cout << err_text.c_str();
    //    }
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.06.2014, 13:53     Добавить выброс исключении #6
SatanaXIII, ловить исключение следует по ссылке.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.06.2014, 16:20     Добавить выброс исключении #7
Цитата Сообщение от SatanaXIII Посмотреть сообщение
каддафи,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    try
        {
        if( count > 0 )
            max_stack[--count]; // Udalit iz steka
        else
            throw std::logic_error("empty stack");
            //throw std::string( "empty" );
        }
    catch( logic_error log_err)
        {
            cout << log_err.what();
        }
    //catch( std::string err_text )
    //  {
    //  std::cout << err_text.c_str();
    //    }
Он же так и вставит прямо в метод трай кетч =)
каддафи
2 / 2 / 1
Регистрация: 02.10.2012
Сообщений: 91
15.06.2014, 16:43  [ТС]     Добавить выброс исключении #8
А если я буду просто писать throw 100 например там где ошибка или throw 150 . А потом
C++
1
2
3
4
5
6
7
8
catch (int i)
{ 
 
if (i==100)
показать то то
if (i==150)
показать то то
}
Это будет считаться грамотным? И будет считаться что я использовал исключения?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.06.2014, 16:51     Добавить выброс исключении #9
каддафи, грамотное решение предполагает использование класса для объекта исключения. Пользовательского или стандартного. Но уж точно не базовых типов как int. Несмотря на то, что это работает.
каддафи
2 / 2 / 1
Регистрация: 02.10.2012
Сообщений: 91
15.06.2014, 16:59  [ТС]     Добавить выброс исключении #10
Tulosba, У меня просто время поджимает, нужно сегодня уже сдать. Точнее сдал уже. В вашем варианте я не понял как это работает, но работает. А второе исключение вашим методом по аналогии сделать не получилось. Пришлось тупо через int сделать.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
15.06.2014, 19:17     Добавить выброс исключении #11
Цитата Сообщение от Tulosba Посмотреть сообщение
ловить исключение следует по ссылке
C++
1
2
3
4
5
6
7
8
9
10
11
    try
        {
        if( count > 0 )
            max_stack[--count]; // Udalit iz steka
        else
            throw std::logic_error( "empty stack" );
        }
    catch( logic_error &exp )
        {
            cout << exp.what();
        }
Ня?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2014, 19:30     Добавить выброс исключении
Еще ссылки по теме:

Добавить конструктор C++
Добавить кнопку C++
что произойдет при исключении переопределения функции из класса C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.06.2014, 19:30     Добавить выброс исключении #12
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ня?
К словам Nekto тоже стоит прислушаться И std:: отклеился.
Yandex
Объявления
15.06.2014, 19:30     Добавить выброс исключении
Ответ Создать тему
Опции темы

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