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

динамический массив - C++

Восстановить пароль Регистрация
 
mixon-21
 Аватар для mixon-21
3 / 3 / 0
Регистрация: 05.03.2013
Сообщений: 219
07.08.2013, 15:37     динамический массив #1
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива. Перегрузите операторы: [ ], =, +, -,++ (добавление элемента в конец массива), -- (удаление элемента из конца массива).

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
#include <iostream>
#include <time.h>
using namespace std;
class myMass{
public:
    myMass(){};
    ~myMass(){};
void Display();
};
void myMass::Display()
{
srand(time(NULL));
int *mas=new int[20];
cout<<"mass = ";
for(int i=0;i<20;i++){
    mas[i]=rand()%100;
    cout<<mas[i]<<' ';
}
delete [] mas;
cout<<endl;
system("pause");
}
 
int main()
{
    myMass ekz;
    ekz.Display();
    return 0;
}

как реализовать проверку выхода за границы массива и перезагрузить операторы.?????

помогите плиз.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2013, 15:37     динамический массив
Посмотрите здесь:

Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла C++
динамический массив (Целое число разложить на массив простых множителей) C++
Создать динамический массив (Если чётных чисел больше, то массив должен быть укорочен на 2 элемента) C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив C++
C++ Переделать динамический массив на статический массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mee
 Аватар для Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
07.08.2013, 16:00     динамический массив #2
Проверка выхода за границы массива, например, такая:
держать в объекте число, отвечающее за количество элементов массива, и следить что бы в операторе [] аргумент был больше или равен нулю и меньше этого числа.
А в чем вопрос с операторами? Вы не знаете что они должны делать или как их перезагрузить в плане синтаксиса?
mixon-21
 Аватар для mixon-21
3 / 3 / 0
Регистрация: 05.03.2013
Сообщений: 219
07.08.2013, 16:12  [ТС]     динамический массив #3
как перезагрузить в плане синтаксиса
Mee
 Аватар для Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
07.08.2013, 16:44     динамический массив #4
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
#include <iostream>
#include <time.h>
using namespace std;
class myMass{
public:
        myMass()
        {    
            srand(time(NULL));
            mas=new int[20];
            size = 0; // в начале - 0 елементов 
        };
 
 
   myMass & operator = (const myMass & other)
    {
        if (this != &other) // защита от неправильного самоприсваивания
        {
            // 1: выделяем "новую" память и копируем элементы
            int * new_array = new int[20];
            std::copy(other.mas, other.mas + other.size, new_array);
 
            // 2: освобождаем "старую" память
            delete [] mas;
 
            // 3: присваиваем значения в "новой" памяти объекту
            mas = new_array;
            size = other.getsize();
        }
        // по соглашению всегда возвращаем *this
        return *this;
    }
 
        ~myMass()
        {
            delete [] mas;
        };
 
    void Display();
 
    int operator [] (int index) const 
    {
        if (fits(index))
            return mas[index];
        else 
        {
            cout<<"error";
            return 0; // а по хорошему оброботать ошибку
        }
    }
 
    int getsize() const
    {
        return size;
    }
 
private:
 
    bool fits(int i) const 
    {
        return (i< size && i >= 0);
    }
 
 
    int *mas; 
    int size;
};
 
void myMass::Display()
{   
        cout<<"mass = ";
        for(int i=0;i<20;i++){
            mas[i]=rand()%100;
            cout<<mas[i]<<' ';
            size ++ ;
        }
 
        cout<<endl;
};
 
int main()
{
    myMass ekz, ekz2;
    ekz.Display();
    ekz2.Display();
 
    ekz = ekz2;
    cout << ekz[1] << endl;
    cout << ekz[100] << endl;
    return 0;
};
такое что-то, вроде все не особо сложно
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
07.08.2013, 16:53     динамический массив #5
Как вариант. Можно скомбинировать с кодом Mee.
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 <time.h>
using namespace std;
class myMass{
public:
    myMass(int size_ = 2);
    myMass(int size_ , int random);
    int getSz(){ return size; };
    ~myMass(){delete [] array_int;}
void Display();
void init(int size_);
int& operator[](int);
 
private:
static int minsize;
int *array_int;
int size;
int error_set;
};
 
int myMass::minsize = 2;//измените как хотите
 
void 
myMass::init(int size_){
if(size_ < minsize) size = minsize;
else
size = size_;
array_int = 0;
array_int = new int[size];
if(array_int==0) throw 1;
}
 
myMass::myMass(int size_ ){
    try{
init(size_);
    }
catch(int a){
    if(a==1){
cout<<"Bad alloc!"<<endl;
system("pause");
exit(a);
}
}
for(int i = 0; i < size; i++) array_int[i]=0;
}
 
myMass::myMass(int size_ , int random){
    try{
init(size_);
    }
catch(int a){
    if(a==1){
cout<<"Bad alloc!"<<endl;
system("pause");
exit(a);
}
}
srand((unsigned)time(NULL));
if(random < 2) random = 100;
for(int i=0;i<size;i++){
    array_int[i]=rand()%random;
}
}
 
int&
myMass::operator[](int ind){
if(ind > -1 && ind < size){
return array_int[ind];
    }
else{
cout<<"Bad index!"<<endl;
system("pause");
return error_set;
}
}
 
void myMass::Display()
{
cout<<"mass = ";
for(int i=0;i<size;i++){
        cout<<array_int[i]<<' ';
}
cout<<endl;
system("pause");
}
 
int main()
{
    myMass ekz(25, 26);
    ekz.Display();
    for(int i = 0; i < ekz.getSz(); ++i) ekz[i]=i;
ekz.Display();
ekz[12345]=12345;
    return 0;
}
Yandex
Объявления
07.08.2013, 16:53     динамический массив
Ответ Создать тему
Опции темы

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