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

Templates (composition). exception handling run-time error - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Создание окон http://www.cyberforum.ru/cpp-beginners/thread632939.html
Пожалуйста подскажите, как создавать и работать с окнами.
C++ Подскажите где ошибка, или может есть другой вариант реализации кода // Упорядочить статический массив(заполненый случайными числами), чтобы в нём чередовались чётные и нечётные элементы, разницу записываем в конец массива. // Функции не использовать. const int n=10; int ar,ch,c2=0,c=0,nch,k=0,p=0; for(int i=0;i<n;i++){ ar=rand()%11; cout<<ar<<"\t"; } cout<<endl; http://www.cyberforum.ru/cpp-beginners/thread632906.html
DLL для Журнала Событий Windows C++
кто-нибудь знает подходящую DLL с пустым сообщением? Например "%s" чтобы было тупо. Очень нужна именно зарегистрированная DLL.. а пустое сообщение для того, чтобы мусор всякий не выводился о том, что не может найти код сообщения для данного источника, и чтобы я туда подставил свои данные собственно.
Аналог функции C# ReadKey() в C/C++ C++
Уважаемые форумчаре, перешол с Си шарпа на C++. Хотел бы поинтересоваться в С шарпе, я создаваю консольное приложение чтоб защитить приложение любой клавишей вводил команду Console.ReadKey(); Хочу поинтересоваться как такую фишку оформить и какой командой на C ++
C++ Проверить, есть ли слово в массиве http://www.cyberforum.ru/cpp-beginners/thread632821.html
Нужна помощь. Вообщем , есть символьный массив , пользователь вводит слово и нужно проверить есть ли это слово в массиве по стоке,столбцам или же по диагонали т.е k y e j l d t r a e s f h j k l q w e e y k i m q t b p u i p i пользователь введ допустим : keep k y e j l d t r
C++ Серийный номер по Volume Name Guid Необходимо зная аппаратный серийный номер накопителя и его pid/vid узнать Volume Name Guid или наоборот, зная букву диска и Volume Name Guid узнать серийный номер. подробнее

Показать сообщение отдельно
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
04.08.2012, 19:56  [ТС]     Templates (composition). exception handling run-time error
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
В данном случае более полезной оказывается внимательность. От хромающей внимательности немного помогают юнит-тесты, но и там надо ж не забыть протестировать попытки обращения к элементам с индексами –1, <размер массива>, <размер массива + 1> и так далее.

Ну как, вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
template<class Type>
    Type Stack<Type>::Pop()
        {
            if (m_current == 0)
                {
                    throw /*какой-нибудь*/ InvalidStateException();
                }
            Type result = m_array->GetElement(m_current - 1); 
            --m_current;
            return result;
        }
У меня на самом деле есть еще одна сложность по заданию надо проверять после push and pop валидность индекса а он у меня получается левый немного
при этом в push and pop надо имплементировать так чтоб с одной стороны эксепшен с Array class перехватывал если что, а с другой стороны чтобы после того как все эксепшены прошли индекс оставался нормальный в пределах массива
короче проще на принт скрине показать

вообщем в тех местах где написано " should be 4 " и " should be 0 " он действительно должен быть такой
вот обновленный код с main.cpp and Stack.cpp больше ничего не менял


main_cpp
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
//                                                      
//                                                  (---.main_cpp---)
//
//      Lib(s)
        #include <iostream>
 
//      Header(s)
        #include "Point.hpp"
        #include "Array.cpp"
        #include "Stack.cpp"
        #include "ArrayException.hpp"
 
        using namespace std;
int main()
{
 
    //!!!!!!Make sure the current index is not changed when the Array class throws an exception.!!!!!!
    
 
    
    const unsigned int size_of_data_array = 10; 
 
    double data_x[size_of_data_array] 
                =   {1830 , 190.1 , 1914 , 1900 , 1839  , 
                     1865 , 1914  , 1633 , 1656 , 18.95 } ; 
 
    double data_y[size_of_data_array] 
                = { 1903 , 1834 , 1812 , 1088 , 1789, 
                   19.47 , 1211 , 1969 , 1535 , 1628   } ; 
 
     
    // Creating an array of Point pointers 
    // with size_of_array elements on the heap.
    Point** MyArrayOfPointers = new Point*[size_of_data_array];         
        
   
    for (unsigned int i = 0 ; i <size_of_data_array; i++ )                      
        { 
    // Create for each element in the array a point on the heap.
            MyArrayOfPointers[i] = new Point(data_x[i],data_y[i]);                                                                                      
        }
 
    const unsigned int size_of_stack = 5; 
    const unsigned int too_big_index = size_of_stack + size_of_stack/2;
    const unsigned int index_of_loop = too_big_index; 
 
 
    Stack<Point> s(size_of_stack);
 
    
    std::cout << " Size of the Stack is:      " << size_of_stack << "\n";
    std::cout << "  Point data array is:      " << size_of_data_array << "\n";
    std::cout << "Index of loops for testing\nPush and Pop fucntions are: " << index_of_loop << "\n";
    
 
                                        cout << "\n\n\t\t --- TEST  of Push() function --- " << endl;
 
    cout << "current possition is BEFORE pushing : " << s.Current() << endl;
for(unsigned int i = 0;i<index_of_loop;i++)
    {
        try {
            std::cout << " index : "    << s.Current() << "  " ;
                      
         s.Push(*MyArrayOfPointers[i]); // 
            }
 
        catch ( ArrayException& objArrayException )
                 {
                    std::cout << objArrayException.GetMessage() ;
                 }  
    }
 
std::cout   << "\nLet's making sure the current index is not\nchanged when the Array class throws an exception." 
            << "\nSo currect index after a lot of incorrect usage of\nPush() function should be 4 let's see -> " 
            << s.Current() 
            << " This is correct index "; 
 
 
    
                                    cout << "\n\n\t\t --- TEST of Pop() function --- " << endl;
for(unsigned int i = 0; i<index_of_loop;i++)
    {
        try {
            std::cout << " index : "    << s.Current() 
                      << "  element : " << s.Pop()<<endl;
            }
 
    catch ( ArrayException& objArrayException )
                 {
                    std::cout << objArrayException.GetMessage() ;
                 }   
    }
 
std::cout   << "\nLet's making sure the current index is not\nchanged when the Array class throws an exception." 
            << "\nSo currect index after a lot of incorrect usage of\nPop() function should be 0 let's see -> " 
            << s.Current() 
            << " This is correct index "; 
 
    std::cout << "\n\n\n";
    cout << endl;
    return 0;
}



Stack_cpp
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
//                                                      
//                                                  (---.Stack_cpp---)
//  
#ifndef STACK_CPP
#define STACK_CPP
 
    #include "Stack.hpp"
    
    
        
    //----------- Implementation of Constructors -----------//
    template<class Type>                            
    Stack<Type>::Stack()                                        // Default constructor
        :m_array(new Array<Type>()),m_current(0) 
        {   //the current position is the last index of the Array
            
        }
 
    
 
    template<class Type>
    Stack<Type>::Stack(int size)                    
        :m_array(new Array<Type>(size)),m_current(0)       
        {   //the current position is the last index of the Array
 
        }
 
    
 
    template<class Type>
    Stack<Type>::Stack(const Stack<Type>& copy)                 // Copy constructor
        :m_array(copy.m_array),m_current(m_array.Size()-1) 
            {   //the current position is the last index of the Array copied
                
            }
 
    template<class Type>
    Stack<Type>::~Stack()                                       // Destructor
        {
 
        }
    
 
    //----------- Implementation of Accessor(s) member functions -----------//
    template<class Type>
    int Stack<Type>::Current() const
        {
 
            
 
            return m_current;
        }
 
    
    //----------- Implementaion of Modificator(s) member(s) function -----------//
    template<class Type>
    void Stack<Type>::Push(const Type& element)
        {   
            
            m_array->SetElement(element,m_current); 
            ++m_current;
 
        
        }
    
    template<class Type>
    Type Stack<Type>::Pop()
        {
        
        Type    result =  m_array->GetElement(m_current - 1);
        --m_current;
        
        return result; 
        
        }
 
 
    //----------- Implementation of Operators Overloading the class's member -----------//
    template<class Type>
    Stack<Type>& Stack<Type>::operator=(const Stack<Type>& s)   // Asignment operator
        {
            if(this!=&s)        //handle self assignment
            {
                this->Stack<Type>::operator=(s);
                m_current = s.m_current;
            }
 
            return(*this);
        }
 
#endif


При это const у Current() функции убирать нельзя полубас доебу...я почему аксессор не конст
Миниатюры
Templates (composition). exception handling run-time error  
 
Текущее время: 23:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru