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

Делаю Memory Manager Array с простым (int) exception последний элемент чудит - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ "Плейсхолдер" (placeholder) http://www.cyberforum.ru/cpp-beginners/thread630846.html
"Плейсхолдер" (переводится как прототип или заполнитель ?) - так говорят многие участники на этом форуме, объясните пожалуйста, что это такое ?? поисковик выдал мне много всего от хабра с html5 до как лечить удава. Ребят, еще вопрос у меня в теме по Си )) про signal.h, помогите разобраться ))
C++ Рисование ASCII кодами и русский текст в консоли Всем добрый вечер. И вот такой вопрос есть. Сначала печатаю в консоли текст а под ним горизонтальную линию. Только вместо линии получаются каракули. Уже по разному пробовал, шрифты менял и ничего не помогает. Получается или текс по-русски а вместо линии непонятно что, или линия нормальная а вместо текста абракадабра. Как это можно одновременно сделать? #include <iostream> #include <windows.h>... http://www.cyberforum.ru/cpp-beginners/thread630821.html
C++ Составить программу для вычисления количества цифр среди элементов списка.
Тема: Динамические структуры данных. Линейные списки. Дан список А, состоящий из записей: первое поле – символ, второе – адрес следующего элемента. Составить программу для вычисления количества цифр среди элементов списка.
C++ Запуск программ на других компах
Всем привет, вообщем перерыл весь интернет, как запускать скомпилированную программу на разных компьютерах, пробывал ставить и статич библиотеки и dll и mt\ и тд вылетали разн ошибки, вообщем пришол к решению создавать установщик windows и прикладывать к ним framework и нужные библиотеки, но что делать если я хочу например написать шуточную программу подшутить над кемнибудь, не буду я же ...
C++ Цельсий в Фaренгейт и Реoмюр http://www.cyberforum.ru/cpp-beginners/thread630771.html
========== Для тeмпературы от -5 до +5 °C с шaгом 1.25 °C вывeсти соoтвeтствующие знaчения по Фaренгейту и Реoмюру. oформить вывoд в видe крaсивpй тaблицы. Дробные числа округлить до 2 знаков после запятой. t(F) = t(C) * 9/5 + 32 t(R) = t(C) * 4/5 ========== мой код #include <iostream> using namespace std;
C++ Define внутри макроса Подкажите возможно ли написать макрос кот. создаст #define? например: #define MACRO(name) #define NAME name знаю, что напрямую так не напишешь т.к. второй define будет взят в кавычки, но может есть какая "хитрость" Нужен макрос раскрывающийся в следующий код пишем так: #define MAT1(name, ...) int name##1 = { __VA_ARGS__ }; #define MAT2(name, ...) int name##2 = { __VA_ARGS__ }; ... подробнее

Показать сообщение отдельно
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
30.07.2012, 21:52  [ТС]     Делаю Memory Manager Array с простым (int) exception последний элемент чудит
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Что-то вы намудрили с исключениями. В чём прикол выбрасывать их в геттеро-сеттерах и тут же ловить? Это ведь должно быть головная болью пользователя контейнера, если он обращается чёрти-куда, хотя может узнать, куда может обращаться.

Не по теме:

> ignore the set, because index of element bigger then massive size
И английский не мешало бы подтянуть.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Point& Array::GetElement(const int index) const
{
    try {
        if (index > m_size || index < 0) { 
            throw -1;
        } 
        return m_data[index];
    } 
    catch (int throw_variable) {
        std::cout << "\nindex incorrect, index too big or too small " 
                  << throw_variable 
                  << std::endl; 
    }          
}
В массиве 3 элемента, я обращаюсь к элементу номер 42. Следите за руками:
1. Входим в try-блок.
2. Проваливаем проверку в if, бросаем минус единицу.
3. Она перехватывается catch-блоком.
4. Выводится на экран сообщение.
// а теперь интересное
5. Выходим из catch-блока.
6. Функция должна была вернуть ссылку на элемент, но ведь return не был вызван.
array.cpp new
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
//                                          Array_cpp
#include "Array.hpp"
                                        
    //----------- Implementation of Constructors -----------//
    Array::Array() :  m_size(10), m_data(new Point[m_size])                                    
            {
            //  std::cout << "Array Default Constructor was called " ;
            }
 
    Array::Array(const int new_size) :m_size(new_size), m_data(new Point[new_size])       //specified by the size input argument                    
            {   
            //  std::cout << "Array Constructor was called "; 
            }
 
    Array::Array(const Array& ObjArray) 
        {
           // std::cout << "Array copy Constructor "; 
            m_size    =    ObjArray.m_size;         // shallow copy - this is not dynamic alloc
                if (ObjArray.m_data)                // if not zeros then there is a ref. - Deep copy needed
                    {
                        m_data = new Point[ObjArray.m_size];
                        for (int i = 0; i <   ObjArray.m_size; i++)
                        m_data[i]    =    ObjArray.m_data[i];
                    }
                else
                m_data = 0;                         //NULL
        }
 
    Array::~Array()                                 
        {
            std::cout << "Array Destructor was called" ;
            delete [] m_data;
        }
 
 
    //----------- Implementation of Modificators member functions -----------//
    void Array::SetElement(const Point& ObjPoint,const int index)
        {   
                try
                    {
                        if (index > m_size) {throw -1;} // When the index is out of bounds, ignore the “set”.
                        m_data[index] = ObjPoint;
                        std::cout << "Set Element " 
                                  << ObjPoint  << std::endl;
                    }
                catch (int throw_variable ) //!!!MY QUESTION DELETED!!! what does x mean what this is the mystical variable 
                    {
                        std::cout << " ERROR *** " 
                                  << throw_variable 
                                  << " ignore the set, because index of element bigger then massive size "
                                  << std::endl;
                    }
        }
 
 
 
    //----------- Implementation of Accessor(s) member functions -----------//
    Point& Array::GetElement(const int index) const
        {   // cout << "GetElement...done " << endl;
            /*try 
                {
                    
                    if (index > m_size || index < 0)    
                        { 
                            throw -1;
                        } 
                    
                    return m_data[index];
                    
                } 
            
 
            catch (int throw_variable)
                {
                    std::cout << "\nindex incorrect, index too big or too small " 
                              << throw_variable 
                              << std::endl; 
                }  */
 
                try {
        if (index > m_size || index < 0) { 
            throw -1;
        } 
        return m_data[index];
    } 
    catch (int throw_variable) {
        std::cout << "\nindex incorrect, index too big or too small " 
                  << throw_variable 
                  << std::endl; 
    }          
 
                
        }
 
    int Array::Size() const // Get size
    { 
        return m_size;
    }
 
 
    //----------- Implementation of Operators Overloading the class's member -----------//
    const Point& Array::operator [] (int index) const
        {   
 
            //std::cout << " []  OPERATOR for ***READING*** was called " ; 
 
            if (index > this-> m_size)
                    {
                        std::cout << "OUT OF BOUND ";
                        return this->m_data[0];
                    }
 
            return m_data[index];
        }
 
    Point& Array::operator [] (int index)
        {   
 
        //  std::cout << "[] operator for writing was called \n" ; 
 
            if (index > this->m_size)
                    {
                        std::cout << "OUT OF BOUND \n" ; 
                        return this->m_data[0];
                    }
            return m_data[index];
 
        }
 
 
    Array& Array::operator = (const Array& ObjArray)
        {
            
 
        //  std::cout << " In the Array Assignment operator\n";
 
            if (this == &ObjArray)
                {
            //  std::cout << "Same Array \n"; 
                return *this;
                }
 
            delete [] m_data;
            std::cout << "Deleted m_data array\n";
 
            m_size = ObjArray.m_size;                               // shallow copy - this is not dynamic alloc
 
            if (ObjArray.m_data)                                    // if not zeros then there is a ref.
                    {
                        std::cout <<"im here\n"; 
 
                        m_data = new Point[ObjArray.m_size];        // create a new pointee.
 
                        for (int i = 0; i < ObjArray.m_size; i++)
                            m_data[i]    =    ObjArray.m_data[i];   //copy the points from/to array
                    }
            else
                m_data = 0;  //NULL
 
            return *this;
        }
 
    
 
 
    //----------- Implementation of GLOBAL(friend) Ostream << Operator  -----------//
std::ostream& operator << (std::ostream& os, const Array& ObjArray)
        {
            os << "\nArray Size = " << ObjArray.m_size << std::endl;
 
                for (int i = 0; i < ObjArray.m_size; i++)
                    os << "Array [" << i << "]= "<< ObjArray.m_data[i] << "\n";
 
            return os;
        }


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