程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者: 王智凯
* 完成日期: 2012年 5月22日
* 版 本 号: 凯子
#include <iostream>
using namespace std;
class MyArray
{
private:
int *arr; //用于存放动态分配的数组内存首地址
int size; //数组大小
public:
MyArray(int sz=50);
MyArray(int a[],int sz); //由一个内置类型的数组初始化
MyArray(const MyArray &A); //拷贝构造函数
~MyArray(void); //析构函数,注意释放空间
MyArray&operator =(const MyArray &A); //重载“=”使得数组对象可以整体赋值
//int& operator[](int i); //重载[],使得Array对象也可以如C++普通数组一样,用a[i]形式取出值【选做】
bool operator == (MyArray& A); //重载==,使得Array对象能整体判断两个数组是否相等(size相等且对应元素相等)
MyArray operator + (MyArray& A); //重载+,使两个Array对象可以整体相加(前提大小相等)【选做】
friend ostream& operator << (ostream& out,MyArray& A); //重载<<,输出数组
int GetSize(void)const; //取数组大小;
void Resize(int sz); //修改数组的大小,如果sz大于数组的原大小,增加的元素初始为;sz小于数组的原大小,舍弃后面的元素【选做】
};
MyArray::MyArray(int sz)
{
if(sz<=0)
{
cout<<"invalid Array Size!";
exit(1);
}
size=sz; //将元素个数赋值给变量size
arr=new int[size];//动态分配内存,将size个int类型的元素空间分配出来
for(int i=0; i<size; ++i)
*(arr+i)=0;
}
MyArray::MyArray(int a[],int sz) //由一个内置类型的数组初始化
{
size = sz;
arr=new int[size];//动态分配内存,将size个int类型的元素空间分配出来
for(int i=0; i<size; ++i)
*(arr+i)=*(a+i);
}
MyArray::MyArray(const MyArray &A) //拷贝构造函数
{
arr=new int[A.size];
for(int i=0; i<A.size; ++i)
*(arr+i)=*(A.arr+i);
size=A.size;
}
MyArray::~MyArray(void){ delete []arr;} //析构函数,注意释放空间
MyArray & MyArray::operator =(const MyArray &A) //重载“=”使得数组对象可以整体赋值
{
arr=new int[A.size];
for (int i=0; i<A.size; ++i)
*(arr+i)=*(A.arr+i); //将数组arr中元素逐个赋值
size=A.size;
return *this;
}
//int& MyArray::operator[](int i); //重载[],使得Array对象也可以如C++普通数组一样,用a[i]形式取出值【选做】
bool MyArray::operator == (MyArray& A) //重载==,使得Array对象能整体判断两个数组是否相等(size相等且对应元素相等)
{
int i;
if(A.size != size)
return false;
else
{
for(i = 0;i<size;++i)
{
if(A.arr [i] != arr[i])
return false;
}
return true;
}
}
MyArray MyArray::operator + ( MyArray& A) //重载+,使两个Array对象可以整体相加(前提大小相等)
{
int i;
int n=A.size;
MyArray a(n); //指定size的数组
for(i = 0;i<size;++i)
{
//a[i] = A.arr[i] + arr[i];
*(a.arr+i)=*(A.arr+i)+*(arr+i);
}
return a;
}
ostream& operator << (ostream& out,MyArray& A) //重载<<,输出数组
{
int i;
out<<"该数组是:";
for(i = 0;i<A.size;++i)
{
out<<A.arr[i]<<" ";
}
cout<<endl;
return out;
}
int MyArray::GetSize(void)const //取数组大小;
{
return size;
}
void MyArray::Resize(int sz)//将数组大小修改为sz
{
int *a,i=0;
if(sz>size)
{
a = new int[sz];
for( i=0;i<size;++i)
*(a+i)=*(arr+i);
for(i=size;i<sz;++i)
*(a+i)=0;
arr = new int[sz];
for(i=0;i<sz;++i)
*(arr+i)=*(a+i);
size=sz;
}
else
{
a = new int[sz];
for(i=0;i<sz;++i)
*(a+i)=*(arr+i);
arr = new int[sz];
for(i=0;i<sz;++i)
*(arr+i)=*(a+i);
size=sz;
}
}
//mian
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[10]={4,5,6,7,8,9,10,11,12,13};
MyArray arr1(a,10);
MyArray arr2(b,10);
MyArray arr3(10);
cout<<arr3;
arr3 = arr1 +arr2;
cout<<arr3;
arr3.Resize(20);
cout<<arr3;
arr3.Resize(5);
cout<<arr3;
system("pause");
return 0;
}
上机感言:程序有点难,拷贝构造函数不太会,,这次有点小打击了