求大神改错,重点看GET函数,谢谢啊

u014788030 2014-04-28 05:26:41
#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;
}
...全文
60 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧