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

Класс-массив - C++

Восстановить пароль Регистрация
 
Taxoma
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 30
08.05.2014, 17:08     Класс-массив #1
Здравствуйте. Нужно разъяснение.
Есть класс "Масса" всё корректно работает, нареканий нет.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class MMas
{
        private:
                float Mas;
                String Un;
        public:
                MMas(){Mas=0; Un="г";} //по умолчанию
 
                void SetMas(float m);//установка значения
                void SetUn(String u); //установка размерности
 
                void SetMasStr(char *str, int len); //установка значения и размерности из строки
                float GetMas(){return Mas;}// запись массы
                String GetUn(){return Un;}//запись значение
                void SetUnNo(int q);//установка значение с помощью списка
                void Convert(String r, float s);//перевод в граммы
};

Понадобилось создать второй класс-массив и реализовать "Двустороннюю очередь" (Не доделан до конца, т.к. столкнулся с проблемой, проблема далее).
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
class ArrMas
{
        private:
                MMas* Arr;
                unsigned int Len;
        public:
                ArrMass(){Arr=0; Len=0;} // Конструктор по умолчанию (размер массива 0)
                ~ArrMas(){if(Arr) delete[]Arr;}
                void SetSize();//установка размера
                MMas& operator[](unsigned int i);
                void AddF(MMas& z1);//добавление в начало
};

Нажимаю я кнопку, масса вводится, конвертируется и не могу понять, как записать объект класса MMas в этот Класс-массив. Рассмотрю на примере "Добавление в начало очереди"
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
void ArrMas::AddF(MMas& z1)//добавление в начало
{
        SetSize();//увеличиваем размер массива на 1
        for(int i=Len; i>0; i--)
                Arr[i]=Arr[i-1];
        Arr[0]=z1;
}

Вот кусок программы:
C++
1
2
3
4
5
MMas a;
ArrMas a1;
a.SetMasStr(Edit3->Text.c_str(),(Edit3->Text).Length());
a.Convert(a.GetUn(),a.GetMas());
a1.AddF(a);
Собственно, разъясните, как правильнее записать. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2014, 17:08     Класс-массив
Посмотрите здесь:

создать класс массив C++
Класс массив C++
Класс+массив C++
Класс Массив C++
Класс и двумерный массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21434 / 10219 / 1666
Регистрация: 12.02.2012
Сообщений: 17,092
08.05.2014, 19:35     Класс-массив #2
Что-то я не обнаружил в коде класса ArrMass ни одного оператора new... Где память-то выделяется?
Taxoma
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 30
08.05.2014, 20:05  [ТС]     Класс-массив #3
Catstail, у меня это сделано в void SetSize();
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void ArrMas::SetSize()
{
      MMas *tmp;
      Len++;
      tmp=new MMas[Len];
      if(Arr)
      {
            for(unsigned int i=0; i<Len; i++)
                  tmp[i]=Arr[i];
            delete[]Arr;
      }
      Arr=tmp;
      delete[]Arr;
}
Добавлено через 14 минут
в последней строке, так, описался.
C++
1
delete[]tmp;
Taxoma
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 30
10.05.2014, 13:54  [ТС]     Класс-массив #4
Вот при записи в массив вылазит ошибка
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11809 / 6788 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
10.05.2014, 13:57     Класс-массив #5
C++
1
2
      Arr=tmp;
      delete[]Arr;
Освободили память и теперь Arr "указывает" на кусок освобожденной памяти.
Taxoma
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 30
10.05.2014, 14:21  [ТС]     Класс-массив #6
Croessmah, там было не верно. Если убрать последнюю строку, будет верно? Я так понимаю, у меня ошибка из-за того, что память не правильно выделяется.
Yandex
Объявления
10.05.2014, 14:21     Класс-массив
Ответ Создать тему
Опции темы

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