Проблема с объявлением динамического массива в классе

  • Автор темы 4xter
  • Дата начала
Статус
Закрыто для дальнейших ответов.
4

4xter

Гость
#1
Возникла проблема при работе с динамическим массивом в классе. Ранее когда я просто через константу задавал размер массива, то всё ок работало. Теперь хочется сделать чтобы размер задавался пользователем. Вообще задачка следующая: перегрузить операцию > при работе с массивами. Я сделал её таким образом что содержимое массива а просто копировалось в b операцией a>b. Суть не в этом. НЕ МОГУ МАССИВЫ САМИ ПОЛУЧИТЬ. В результате мне выводит пустые ячейки памяти.
Вот мой код:
<!--shcode--><pre><code class='код'>#include
<iostream>
using namespace std;
//int const Size =5; // размер масива

class Masiv{
//private :
//int size1;

public:
int Size1;
int M[];
Masiv() {};
~Masiv(){};
void SetI(int Data,int i);
int GetI(int i){return M;}
int getSize(int Size);
Masiv operator>(Masiv &);

};
int Masiv::getSize(int Size)
{
Size1=Size;
return Size1;
}
void Masiv::SetI(int Data,int i){
M=Data;

}

Masiv Masiv::operator>(Masiv &V){
// Masiv B;
for (int i=0;i<Size; i++)

V.SetI(GetI(i),i);

return V;

}
void viev(Masiv A){
for (int i=0;i<Size;i++)
cout << i<<'\t'<< A.GetI(i)<<endl;
}

int main ()

{
Masiv D,C,G;
int el=0;
cout<<"Vvedite elementy massiva\n";
for (int i=0;i<Size;i++)
{
// cin>>el;
D.SetI(i,i);}
viev(D);
D>C;
cout<<"NewMass\n";
viev(C);


return 0;

}[/CODE]



Помогите разобраться. Заранее спасибо. Делается всё в MS Visual C++
 
A

Ambroyz

Гость
#2
в описании массива используйте vector<int> M,
в операциях добавления M.push_down(Data) //вроде так :what?:
будет динамически расширяемый массив, а так как объявили вы, странно что вообще собралось, поидее безразмерные определения массивов могут быть только при инициализации их при объявлении
 
O

Odin_KG

Гость
#3
В коде, по-моему, вообще нет никакой деятельности по изменению размера массива. Если вы не делаете через шаболы типа vector, то нужно создавать и расширять массив ручками, т.е. при добавлении элементов:
1) Создать новый массив нужной длины (через new)
2) Скопировать текущий массив в новый
3) Удалить старый массив (delete []M;)
4) M=указатель на новый массив

Не знаю, можно ли писать так:
int M[];
обычно пишут:
int* M;
 

vova25

New Member
11.12.2008
1
0
#4
по-моему нельзя объявлять безразмерный массив.
это не должно собираться.
 
Z

zeus

Гость
#5
Pardon :) а что делает странная функция?
int Masiv::getSize(int Size)
 
Статус
Закрыто для дальнейших ответов.