#include <iostream>
#include <assert.h>
using namespace std;
//Start OF Array Class -->
class Array{
private:
unsigned int size;
int *pInteger;
public:
//מאתחל את המחלקה
Array(){
size = 0;
pInteger = new int;
assert(*pInteger!=0);
};
//קופי קונסטרקטור
Array(const Array& CArray)
{
pInteger = new int(*(CArray.pInteger));
assert(CArray.pInteger!=0);
size = CArray.size;
};
//הגדרת משתנה ריק עם מספר במערך
Array(int sizeofArray)
{
size = sizeofArray;
pInteger = new int;
assert(*pInteger!=0);
};
~Array()
{
delete pInteger;
};
Array AddRows(const Array& , const Array&);
void SetRows(int ,int);
void PrintRows();
Array operator +(const Array&);
Array& operator = (const Array& );
int& operator (const int);//subscript operator
const int& operator (const int )const;//subscript operator
};
void Array::SetRows(int arr, int newsize)
{ // פונקצייה שמיישמת הצבה למשתנה
delete pInteger;
pInteger = new int;
size = newsize;
for (int i=0;i<size;i++)
*((pInteger)+i) = arr;
}
void Array::PrintRows()
{
int i;
for(i=0;i<size;i++)
cout << pInteger << "\n";
}
Array Array::AddRows(const Array &farray, const Array &sarray)
{ int i ;
if ( farray.size > sarray.size )
{
Array result(farray.size);
for (i=0;i<sarray.size;i++)
{result = farray + sarray;}
for (i=sarray.size;i<farray.size;i++)
result = farray;
cout << "Debug:\n";
for (i=0;i<farray.size;i++)
cout << result.pInteger << "\n" ;
cout << "End Debug\n";
//לבדוק למה הוא לא מחזיר לי את המערך השלם של התוצאות ורק את התוצאה הראשונה...
return result;
}
else
{ Array result(farray.size);
return result;
}
return farray;
}
Array& Array::operator = (const Array& other)
{
//if (this!=other)
//{
this->size = other.size;
delete this->pInteger;
this->pInteger = new int;
assert(this->pInteger);
int i=0;
for (;i<this->size;i++)
{ int a;
a = other.pInteger;
this->pInteger = a;
cout << "\nRow: " << i << "\n" << "a =" << a << "\n" << "this->pInteger = " << this->pInteger ;
}
return *this;
}
Array Array::operator +(const Array& sec)
{
Array result(*this);
return Array::AddRows(*this,sec);
}
int& Array::operator (const int index)//left side
{
if(index>=0 && index < size)
return pInteger;
else
cerr<<"Out of boundary of array:"<<endl;
exit(1);
}
const int& Array::operator (const int index)const //rigth side
{
if(index>=0 && index <= size)
return pInteger;
else
cerr<<"Out of boundary of array:"<<endl;
exit(1);
}
int main()
{ int data;
data = 2;
data = 5;
data = 13;
data = 4;
data = 5;
data = 75;
Array one,two;
Array tree(6);
one.SetRows(data,6);
data = 1;
data = 4;
data = 79;
data = 3;
two.SetRows(data,4);
//tree = two.AddRows(one,two);
tree = one + two;
//Array tree(two.AddRows(one,two));
one.PrintRows();
cout << "\n";
two.PrintRows();
cout << "\n";
tree.PrintRows();
cout << "\n";
cin >> data;
}