求大神改错,重点看GET函数,谢谢啊
#include <iostream.h>
class intArray
{
public:
intArray(int size);//构造函数
intArray(const intArray &x);//复制构造函数
~intArray();//析构函数
bool Set(int i, int elem);//设置第i个数组元素的值,设置成功返回true,失败返回false
bool Get(int i, int &elem); //获取第i个数组元素的值,获取成功返回true,失败返回false
int Length( ) const;//获取数组的长度
void ReSize ( int size ); //重置数组
intArray &operator=(const intArray &other); //赋值运算符“=”重载函数
intArray &operator+(const intArray &other); //加运算符“=”重载函数
intArray &operator-(const intArray &other) ; //减运算符“=”重载函数
friend ostream & operator>>(ostream &, intArray &); //数组的整体输入
friend ostream & operator<<(ostream &, intArray &); //数组的整体输出
private:
int *element; //指向动态数组的指针
int arraysize; //数组的当前长度
};
intArray::intArray(int size):arraysize(size)
{
element=new int[size];
}
intArray::intArray(const intArray &x):arraysize(x.arraysize)
{
element=new int[arraysize];
}
intArray::~intArray()
{
delete[] element;
}
bool intArray::Set(int i, int elem)
{
if (i>=arraysize)
return false;
else
element[i]=elem;
return true;
}
bool intArray::Get(int i, int &elem)
{
if (i>=arraysize)
return false;
else
elem=element[i];
return true;
}
int intArray::Length() const
{
return arraysize;
}
void intArray::ReSize(int size)
{
delete[] element;
element=new int[size];
arraysize=size;
}
intArray & intArray::operator=(const intArray& other)
{
arraysize=other.arraysize;
element=new int[arraysize];
return *this;
}
//加运算符“+”重载函数
// 如果两个数组大小不一样,直接返回
intArray & intArray::operator+(const intArray &other)
{
if (arraysize <= 0 || other.Length()<=0 || element==NULL || arraysize!=other.Length())
{
return *this;
}
int nOpCount =arraysize;
intArray temp(nOpCount);
for (int i=0; i<nOpCount; i++)
{
int nOtherElement=0;
other.Get(i, ¬herElement);
temp.Set(i, element[i] + nOtherElement);
}
return temp;
}
//减运算符“-”重载函数
// 创建一个和this对象相同尺寸的数组
intArray & intArray::operator-(const intArray &other)
{
if (arraysize <= 0 || other.Length()<=0 || element==NULL || arraysize!=other.Length())
{
return *this ;
}
int nOpCount =arraysize;
intArray temp(nOpCount);
for (int i=0; i<nOpCount; i++)
{
int nOtherElement=0;
other.Get(i, ¬herElement);
temp.Set(i,element[i] - nOtherElement);
}
return temp;
}
//数组的整体输入
istream &operator>>(istream &is, intArray &arr)
{
int nLength = 0;
is >> nLength;
if (nLength != arr.Length())
{
arr.ReSize(nLength);
}
int nValue;
for (int i=0; i<nLength; i++)
{
is >> nValue;
arr.Set(i, nValue);
}
return is;
}
//数组的整体输出
ostream & operator<<(ostream &os, intArray &arr)
{
os << "该数组元素个数为:" << arr.Length() << endl;
int nValue=0;
for (int i=0; i<arr.Length(); i++)
{
arr.Get(i, &nValue);
os << nValue << " ";
}
os << endl;
return os;
}
int main()
{
int i;
//(1)先构造包含10个数组元素的数组对象a,再调用流提取运算符重载函数实现a的元素初始化
//(元素值分别为1—10),输出a数组;
intArray a(10);
cin >> a;
cout << a;
// 2)并利用a来构造数组b,输出数组b,并调用get函数获取b中下标为奇数的各元素值并输出,
// 然后调用set函数将上述元素值乘以2,输出b数组;
intArray b(a);
cout << b;
for ( i=0; i<b.Length(); i++)
{
if (i%2 != 0)//积数
{
int nElement = 0;
b.Get(i, nElement);
b.Set(i, nElement*2);
cout << nElement << " ";
}
}
cout << endl;
cout << b;
// 3)构造一个包含5个元素的数组c,其值全为1,输出该数组,再调用ReSize函数将其大小重置
// 为10,调用“=”重载函数将a的值复制给c,输出数组c;
intArray c(5);
for ( i=0; i<c.Length(); i++)
c.Set(i, 1);
cout << c;
c.ReSize(10);
c = a;
cout << c;
// 4)分别将b+c,b-c的值送给数组d和数组e,并输出结果。
intArray d = b+c;
cout << d;
intArray e = b-c;
cout << e;
return 0;
}