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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Taxoma
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 30
#1

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

08.05.2014, 17:08. Просмотров 195. Ответов 5
Метки нет (Все метки)

Здравствуйте. Нужно разъяснение.
Есть класс "Масса" всё корректно работает, нареканий нет.
Кликните здесь для просмотра всего текста
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++
В общем задание написать шаблон класса массив. #include "stdafx.h" #include <iostream> #include <fstream> using namespace std; ...

Класс Массив - C++
Нужно создать класс Массив. Методы массива:конструктор с одним параметром-длина массива; ввод-вывод; поиск кол-ва элементов массива,...

Класс+массив - C++
// array.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <conio.h> ...

Написать класс «массив». - C++
В классе реализовать следующие методы: конструкторы (по умолчанию, с параметрами, копирования), деструктор, ввод с клавиатуры, поиск...

Класс-динамический массив... - C++
Нужен такой класс. А как его лучше написать? Через связанные списки? Нужно, чтобы он был "быстрым"... Основные методы: установка размера,...

производный класс 3D массив - C++
Помогите пожалуйста. На основе класса «Матрица» создать производный класс «3D массив». Класс содержит массив, каждый элемент которого...

Класс одномерный массив - C++
Создать класс одномерный массив целых чисел в С++. После ввода с клавиатуры произвольного одномерного массива целых чисел(объекта данного...

Класс и двумерный массив - C++
Здравствуйте , не могу понять почему после создания двумерного массива и заполнения его ,при вызове его в другом методе, он обращается к...

Класс как массив o.O - C++
Возможно ли сделать из класса подобие массива? В классе есть vector<int> Objects; Возможно ли сделать обращение к элементам Objects не...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
22448 / 10853 / 1768
Регистрация: 12.02.2012
Сообщений: 17,971
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
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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     Класс-массив
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru