Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
1

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива

04.06.2010, 20:42. Показов 3011. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создайте класс динамического массива, в котором реализована проверка выхода
за границы массива. Перегрузите операторы: [ ], =, +, -,++
(добавление элемента в конец массива),-- (удаление элемента из конца массива).
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
#include<iostream>
#define cikli for(int i=0;i<z;i++)
#define ciklm for(int i=0;i<obj.cikl();i++)
using namespace std;
class Dmass
{
    int *mass;
    int z;
public:
    
    Dmass(): z(10)
       {
           mass=new int[z];
           cikli
           {
               mass[i]=0;
           }
       };
    ~Dmass()
    {
        delete [] mass;
        cout<<"Объект удален\n";
    };
    int&operator[](int j)
    {
     return mass[j];
    }
    Dmass operator+ (int j)
    {
        Dmass t;
        cikli
        {
            t.mass[i]=mass[i]+j;
        }
        return t;
    }
    Dmass operator- (int j)
    {
        Dmass t;
        cikli
        {
            t.mass[i]=mass[i]-j;
        }
        return t;
    }
    Dmass operator= (Dmass N)
    {
        Dmass *tem=new Dmass[z];
        cikli
        tem->mass[i]=N.mass[i];
        return *this;
    }
    Dmass &operator++ ()
    {
        z++;
        Dmass *tem=new Dmass[z];
        tem[z-1].mass=0;
        return *tem;
    }
    Dmass &operator-- ()
        {
            z--;
            Dmass *tem=new Dmass[z];
            return *tem;
        }
    void Show();
    int cikl()
    {
        return z;
    }
 
};
void Dmass::Show()
{
    cikli
    {
        cout<<mass[i]<<"\t";
    }
}
void main()
{
    setlocale(LC_CTYPE,"Rus");
    Dmass obj;
    Dmass arr;
    Dmass mas;
    ciklm
        cout<<arr[i]<<" ";
    cout<<"\n";
    arr=arr+5;
    ciklm
        cout<<arr[i]<<" ";
}
Программа работает, но когда доходит до arr=arr+5 выдает ошибку в 50й строке. Видимо проблема с перегрузкой функции =

Добавлено через 45 минут
ползем вверх
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2010, 20:42
Ответы с готовыми решениями:

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива....

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива
Народ подскажите такую вещь я написал программку для вставки элементов в массив при этом...

Класс динамического массива с проверкой выхода за границы массива
Задание такое: Создайте класс динамического массива, в котором реализована проверка выхода за...

Реализация защиты выхода за границы массива
Доброго времени! Прошу помочь разобраться с вопросом возникшим, при изучении C++. Я только начинаю...

5
94 / 94 / 14
Регистрация: 04.06.2010
Сообщений: 223
04.06.2010, 21:07 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include<iostream>
 
#define cikli for(int i=0;i<z;i++)
#define ciklm for(int i=0;i<obj.cikl();i++)
using namespace std;
class Dmass
{
        int *mass;
        int z;
public:
        
        Dmass(): z(10)
           {
                   mass=new int[z];
                   cikli
                   {
                           mass[i]=0;
                   }
           };
        ~Dmass()
        {
            
                delete [] mass;
                cout<< endl << "Объект удален\n";
        };
        int&operator[](int j)
        {
         return *(mass+j);
        }
        Dmass& operator+ (int j)
        {
                
                cikli
                {       
                        mass[i]=mass[i]+j;
                }
                
                return *this;
        }
        Dmass operator- (int j)
        {
                Dmass t;
                cikli
                {
                        t.mass[i]=mass[i]-j;
                }
                return t;
        }
        Dmass& operator= (Dmass& N)
        {
                cikli
                {
                z = N.z;    
                mass[i]=N.mass[i];
            
                }
                return *this;
        }
        Dmass &operator++ ()
        {
                z++;
                Dmass *tem=new Dmass[z];
                tem[z-1].mass=0;
                return *tem;
        }
        Dmass &operator-- ()
                {
                        z--;
                        Dmass *tem=new Dmass[z];
                        return *tem;
                }
        void Show();
        int cikl()
        {
                return z;
        }
 
};
void Dmass::Show()
{
        cikli
        {
                cout<<mass[i]<<"\t";
        }
}
void main()
{
        setlocale(LC_CTYPE,"Rus");
        Dmass obj;
        Dmass arr;
        Dmass mas;
        ciklm
                cout<<arr[i]<<" ";
        cout<<"\n";
        arr = arr + 5;
        ciklm
                cout<<arr[i]<<" ";
        
 
}
2
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
04.06.2010, 21:26  [ТС] 3
послы выполнения как бы сложения, выдает непонятные цифры и выдает ошибку(

Добавлено через 3 минуты
точнее сказать срабатывает деструктор а потом ошибка, если убрать деструктор то всё работает
0
Light Knight
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
04.06.2010, 21:30 4
странно, скомпилил, всё работает, может имеет смысл обновить компилятор?
0
94 / 94 / 14
Регистрация: 04.06.2010
Сообщений: 223
04.06.2010, 21:33 5
У меня сложение работает нормально. Описанная ошибка возникала, если при перегрузке оператора +, возвращение было по значению, а не по ссылке.
0
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
04.06.2010, 21:40  [ТС] 6
у меня работает так, выводит 10 нулей, выводит Объект удален, потом выводит -53567456 и ошибка

Добавлено через 1 минуту
besstiaa, вставил ваш вариант полностью, работает))))))))) спасибо, буду дальше разбирать перегрузку остальных операторов
0
04.06.2010, 21:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2010, 21:40
Помогаю со студенческими работами здесь

Помогите исправить ошибку выхода за границы массива
Проблема состоит в следующем - необходимо добавить строки в конец рваного массива. ...

Индексатор для проверки выхода массива за границы
Помогите сделать индексатор, временно сделал просто catch, не могу разобраться. Правил программу...

Ошибка выхода за границы массива, когда её быть не должно
Вот функция: public IntPtr getmas() { char chars =...

Исправить выход за границы двумерного динамического массива
Уважаемые форумчане, помогите, проблема в том, что пишет ошибку после выполнения функции вывода...

Проверка выхода курсора за границы консоли
Помогите, пожалуйста, решить задачку: • метод инициализации Init; метод должен контролировать...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru