/*
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: object.cpp
* 作者:赵 洋
* 完成日期: 2013年5 月 8 日
* 版本号: v1.0
* 输入描述:无
* 问题描述:重载操作数组
* 程序输出:
*/
#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); //重载“=”使得数组对象可以整体赋值
bool operator == (MyArray& A); //重载==,使得Array对象能整体判断两个数组是否相等(size相等且对应元素相等)
int operator[](int i);
MyArray operator + (MyArray&A);
friend ostream& operator << (ostream& out,MyArray& A); //重载<<,输出数组
int GetSize(void) const; //取数组大小;
};
//以下为类成员函数的定义
MyArray::MyArray(int sz)
{
size=sz;
arr=new int[50];
for(int i=0;i<50;i++)
{
arr[i]=0;
}
}
MyArray::MyArray(int a[],int sz)
{
arr=new int[50];
for(int i=0;i<50;i++)
{
arr[i]=a[i];
}
size=sz;
}
// MyArray::MyArray(const MyArray &A)
MyArray::~MyArray(void)
{
//delete [] MyArray;
}
MyArray MyArray::operator=(const MyArray &A)
{
int i;
size=A.size;
for(i=0;i<=size;i++)
{
arr[i]=A.arr[i];
}
return MyArray(arr,size);
}
ostream& operator << (ostream& out,MyArray& A)
{
for(int i=0;i<A.size;i++)
{
out<<A.arr[i]<<" ";
}
out<<endl;
return out;
}
int MyArray::operator[](int i)
{
return(arr[i]);
}
MyArray MyArray::operator + (MyArray&A)
{
int i;
size=A.size;
for(i=0;i<=size;i++)
{
arr[i]+=A.arr[i];
}
return MyArray(arr,size);
}
int MyArray::GetSize(void) const
{
return size;
}
//测试函数
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);//测试只指定大小的新数组对象的初始化
arr3=arr2;
cout<<"arr1:"<<" "<<arr1; //测试对<<的重载
cout<<"arr2:"<<" "<<arr2; //测试对<<的重载
cout<<"arr3=arr2"<<" "<<arr3; //测试对<<的重载
cout<<"The size of arr1 is: "<<arr1.GetSize()<<endl; //测试GetSize()成员函数
cout<<"arr1[3]"<<arr1[3]<<endl;//测试对【】的重载
MyArray arr4=arr1+arr2;
cout<<"arr1+arr2:"<<arr4;
return 0;
}
运行结果: