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

Перегрузка оператора + - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написание условия http://www.cyberforum.ru/cpp-beginners/thread28721.html
функция f должна принимать действительное значение, если значение функции (Ац&Вц)|(Ац&Сц) не равно нулю. Как лучше реализовать?
C++ Точки и работа с командной строкой windows В общем, нужно создать прогу которая будет читать введенные пользователем числа, а потом работать с ними в командной строке винды. Существующий код: #include <iostream.h> #include <conio.h> #pragma hdrstop #pragma argsused int main(int argc, char* argv) http://www.cyberforum.ru/cpp-beginners/thread28717.html
C++ Какая функция в C++ аналогична Ord в Delphi?
знаю в делфи есть функция Ord для получения кода ASCI символа, может кто знает аналог в С++(Builder) и обратную ей функцию???
Скачать файл по url C++
Здрасвуйте! Подскажите есть ли такая функция чтобы скачала файл по url и сохранила его в заданном месте?
C++ Структура "Очередь" (задача) http://www.cyberforum.ru/cpp-beginners/thread28647.html
Помогите, пожалуйста, разобраться со структурой "Очередью". Выбивает ошибки в двух строчках - 11 и 15. Подозреваю, что сам код неточно построен, возможно, есть исправления вначале программы? Задание: Написать программу на Си, которая состоит из следующих действий: 1. Описание структуры данных, используя поименованный целочисленный тип. 2. Описание переменной целочисленного типа....
C++ Поиск ехе файла по сигнатуре. Здравствуйте . Возникла проблема при поиске ехе файла по сигнатуре. 1)Представленная программа должна находить указанный, в соответствии с данной сигнатурой, ехе файл в заданной папке.(В нашем случае текущая директория – диск С).Программа после компиляции выводит сообщениечто не может открыть ни один ехе файл. File B not open File v not open и.т.д. Скажите в чем может быть причина... подробнее

Показать сообщение отдельно
immortal
0 / 0 / 0
Регистрация: 04.04.2009
Сообщений: 5

Перегрузка оператора + - C++

04.04.2009, 20:39. Просмотров 1068. Ответов 8
Метки (Все метки)

В общем проблема в том что я не могу правильно перегрузить оператор точнее могу но ошибки работы с памятью появляются вот код .Оператор + должен добавлять два масива так что бы одинаковые элементы не повторялись.
Код полностью компилируется но после ввода двух масивов вылетает ошибка Debug Asseraation Failled!
Код
[CPP]#include"head.h"
void main()
{
//--------------Cоздание "пустых" объектов-------
Array one,two,tree; 
 cout<<endl<<"Input array"<<endl;    
  cin>>two;
   cout<<endl<<"Input array"<<endl;
    cin>>tree;
     one=two+tree;
	  cout<<"\n\t~~~Integration~~~\n";     
	     cout<<endl<<one<<endl;
cin.get();
cin.get();
}
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
//-------------------Первый класс---------------------
class Element
{
private:
	char element;
public:
 char check2();
Element& operator =(const char& elem)
{
element=elem;
return *this;
}
friend istream& operator>>(istream& cin,Element& a);
friend ostream& operator<<(ostream& s,const Element& a);
};			

ostream& operator<<(ostream& s,const Element& a)
{
	s<<a.element;
	return s;
}

istream& operator>>(istream& cin,Element& a)
{
	cin>>a.element;
	return cin;
}
char Element::check2()
{
 return element;
}
class Array
{
private://Закрытая область
    Element* mas;
	int b;
public:
//-----------Список конструкторов---------------------
Array()
{
b=5;
mas=new Element [b];
}; 
friend istream& operator>>(istream& cin,Array& a);
friend ostream& operator<<(ostream& cout,const Array& a);
Array& operator =(const Array& one);
friend Array operator+ (const Array& one,const Array& two);
/*friend Array operator* (const Array& one,const Array& two);
friend Array operator- (const Array& one,const Array& two);*/
~Array()
{	
delete [] mas;
};
};
ostream& operator<<(ostream& cout,const Array& a)
{
	int i;
	for(i=0;i<a.b;i++)
	{
	cout<<a.mas[i];
	}
	return cout;
}

istream& operator>>(istream& cin,Array& a)
{
	int i;
	for(i=0;i<a.b;i++)
	{
		cin>>a.mas[i];
	}
	return cin;
}
Array operator +(const Array& one,const Array& two)
{
 Array tree;
 delete [] tree.mas;
 int p,l=0,j,i;
 tree.b=one.b+two.b;
 tree.mas=new Element[tree.b];
 for(i=0;i<one.b;i++)
 {
	 tree.mas[i]=one.mas[i];
 }
 for (i=0;i<two.b;i++)
 {
 p=-9;
	 for (j=0;j<one.b;j++)
		 {	  
	 if (two.mas[i].check2()==one.mas[j].check2()) 
	p=j;	 
	     }	
	 if(p==-9)	
	{
		l++;
	    tree.mas[l+one.b-1]=two.mas[i];
	}
 }
tree.b=one.b+l;
return tree;
}
Array& Array::operator =(const Array& one)
{
 delete [] mas;
   b=one.b;
   int i;
mas=new Element[b];
  for(i=0;i<b;i++)
  {
	  mas[i]=one.mas[i];
  }
 return *this;
}
/*Array operator *(const Array& one,const Array& two)
{
 Array tree;
 delete [] tree.mas;
 tree.mas=new Element[tree.b];
 int i,z=00,j;
 for(i=0;i<one.b;i++)
 {
 for(j=0;j<two.b;j++)
 {
 if (one.mas[i].check2()==two.mas[j].check2()){tree.mas[z]=one.mas[i];z++;}
 }
 }
 tree.b=z;
 return tree;
delete [] tree.mas;
}

Array operator -(const Array& one,const Array& two)
{
 Array tree;
 delete [] tree.mas;
 tree.mas=new Element[tree.b];
 int i,z=0,p=0,j;
  for(i=0;i<one.b;i++)
 {
for(j=0;j<two.b;j++)
 {
 if (one.mas[i].check2()!=two.mas[j].check2())p++;
}
if (p==two.b){tree.mas[z]=one.mas[i];z++;}
 p=0;
 } tree.b=z;
 return tree;
delete [] tree.mas;
}

*/
//-------------------Функции второго класса-----------
/*template<class T>void Array<T>::check()
{
int i;
	for(i=0;i<b;i++)
{
	cout<<mas[i];
}
cout<<endl;
char element1;
cout<<"\tEnter element \n";
 cin>>element1;
	int p=0;
  for(i=0;i<b;i++)
	{
cout<<mas[i];	
		if(mas[i].check1(element1)==0) p++;
	}
     if(p==0)cout<<"\tThere isn't element in the array\n";
      if(p==1) cout<<"\tThere is 1 element in the array\n";
       if(p>1) cout<<"\tThere are "<<p<<" elemnts in the array\n"; 
addition();
}
template<class T>void Array<T>::addition()
{
string f;
char element2;
 int position,i;
  T* mas1=new T [b+1];
   cout<<"\tWould you like to add element[yes/no]\n";
    cin>>f;
   	  if(f=="yes")
	   {
		cout<<"\tEnter new element and his position\n";
		 cin>>element2>>position;
		  position=position-1; 
		   for(i=0;i<=position-1;i++)
	         {
		      mas1[i]=mas[i];
	         }
	     	 mas1[position]=element2;
	           for(i=position+1;i<=b;i++)
	            {  
		         mas1[i]=mas[i-1];
	            }
	           delete [] mas;
		       T* mas=new T [b+1];
			    for(i=0;i<=b;i++)
	             {
		          mas[i]=mas1[i];
                 cout<<mas[i];
				 }
				  cout<<endl;
	             deletting(b);
	    }
	else deletting(b);
delete [] mas1;
}
template<class T>void Array<T>::deletting(int b)
{
string d;
int i; 
cout<<"\tWould you like to delete element[yes/no]\n";
  cin>>d;
 if(d=="yes")
   {
T* mas1=new T[b];	
char element3;
int position2,j=0,z,f=0;
     cout<<"\tEnter element\n";
	  cin>>element3;
	  for(z=0;z<=b-j;z++)
	  {
		  if (mas[z].check1(element3)==0)
		  {
			  j++;
			  position2=z;
		      z=z-1;
		 for(i=0;i<=position2-1;i++)
	      {
		    mas1[i]=mas[i];
          }
		  mas1[position2]=mas[position2+1];
		  for(i=position2+1;i<=b-j;i++)
	        {
		     mas1[i]=mas[i+1];
             }
           delete [] mas;
		  T* mas=new T [b];	
	       for(i=0;i<=b-j;i++)
	          {
		       mas[i]=mas1[i];
              }
		  }  
	   }
	 cout<<"\tResult\n";
	  for(i=0;i<=b-j;i++)
	          {
				 cout<<mas[i];
	          }	
       delete [] mas1;         
	  cout<<endl;
	 cout<<"\tEnd of program\n"; 
   	 
   }
   else cout<<endl<<"\tEnd of program\n";
};*/
[/CPP]
Про - * я сам разберусь если смогу понять что с + не так.Оч обидно програма полностью работала но стукнуло мне в голову шаблоны сделать после неудачной попытки реализовать это не получилось востановить исходный код.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru