Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2009, 15:55   #1
alema
 
Регистрация: 22.12.2008
Сообщений: 3
По умолчанию перегрузка

Вот недавно взялась за С++ и не могу понять. нужно для двух объектов класса сделать перегрузку +, поэлементно выбирая больший элемент, в случае если длины не равны просто записать хвост. Вот что у меня получилось, вроде работает. токо не так как бы хотелось

Код:
class massiv {
	public:
	int *ptr;  //massiv
	int len;   //dlina massiva
	massiv(int);
	void display();
	   ~massiv();};
//opisanie konstruktora
massiv::massiv(int leni=5)
{ int i;
len=leni;
  ptr=new int[len];
  cout<<"\n"<<"ptr=";
  for( i=0;i<len; i++)
	 ptr[i]= random(10) ;
  for( i=0;i<len; i++)
 cout<<ptr[i]<<"\t" ;}
void  massiv:: display()
   {		int i;
		cout<<"\n"<<"massiv:";
		for(i=0;i<<this->len;i++)
		cout<<this->ptr[i]<<" ";
   }

//opisanie funkzii
 massiv  operator+(massiv &mas1, massiv &mas2)
 {
int s,t,l=mas2.len, k=mas1.len;
if (k>l)
	 t=k;
else t=l;
 massiv ma(t);      //=new massiv(l);
if (k>l)
	 s=l;
else s=k;

for(int i=0; i<s; i++)
	{  if (mas1.ptr[i]>mas2.ptr[i])
		   ma.ptr[i]=mas1.ptr[i];
	   else ma.ptr[i]=mas2.ptr[i];
	}
for (int i=(s+1); i <t; i++) {
		if(mas1.ptr[i]>mas2.ptr[i])
		   ma.ptr[i]=mas1.ptr[i];
		else ma.ptr[i]=mas2.ptr[i];
}
return ma;
}

//opisanie destructora
massiv::~massiv()
{
 delete [] ptr;
}
int main()
{  int z,x,c;

   cout<<"z=";
   cin>>z;
   cout<<"x=";
   cin>>x;
   randomize();
   massiv t1(z), t2(x);
   massiv t3(c);
   t3=operator +(t1,t2);
   t3.display();

	getch();
	return 0;
}

Последний раз редактировалось Stilet; 28.10.2009 в 16:08.
alema вне форума Ответить с цитированием
Старый 28.10.2009, 18:27   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

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

Код:
for (int i=(s+1); i <t; i++) 
{
   if(mas1.ptr[i]>mas2.ptr[i])
      ma.ptr[i]=mas1.ptr[i];
   else ma.ptr[i]=mas2.ptr[i];
}
counter вне форума Ответить с цитированием
Старый 28.10.2009, 21:20   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

У Вас в функции display ошибка:
Код:
for(i=0;i<<this->len;i++)
cout<<this->ptr[i]<<" ";
Условие выхода в нём: когда i, сдвинутое влево на len будет ноль - тогда выход. Так как начинаете с i = 0, то не происходит ни одной итерации. Вероятно, правильней вот так:
Код:
for(i=0;i < len;i++) // В контексте класса this можно опустить
cout<< ptr[i] <<" ";
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка nevermind_111 Общие вопросы .NET 2 14.10.2009 12:40
Перегрузка ++ counter Общие вопросы C/C++ 3 20.12.2008 13:30
перегрузка + softrix Общие вопросы C/C++ 2 21.06.2008 22:27
Перегрузка ++ Dark_Maks Общие вопросы C/C++ 2 18.12.2007 09:27