#include<iostream>
#include<string.h>
#define M 200
using namespace std;
class array
{
public:
array(int n);
~array();
int &operator[](int n);
array&operator=(array &obj);
int operator==(array &obj);
void print();
private:
int size;
int *ptr;
};
// 1 实现构造函数,为类array的对象分配一个包含n个数组元素的整型数组
array::array(int n)
{
int a[M];
cout<<"输入"<<n<<"个整数:";
for(int i=0;i<n;i++)
cin>>a[i];
size=n;
ptr=new int[size+1]; //sizeof(a)
for(int i=0;i<size;i++) //ptr=a;可能会出错,反正我的程序出错了,还是安全起见吧
{
ptr[i]=a[i];
}
}
// 2析构函数 撤销对象
array::~array()
{
delete []ptr; //数组的撤销方法[]
}
// 3实现[]的重载,a[n]=y;可以为对象数组的第n个元素赋值,函数的实现避免数组越界
int & array::operator [](int n)
{
if(n>=0&&n<=size)
{
cout<<"[]重载成功!"<<endl;
return ptr[n];
}
else
{
cout<<"[]重载不成功!";
// return 0;
}
}
// 4 实现运算符=的重载,是对象之间正确赋值
array & array::operator=(array &obj)
{
int i;
if(*this==obj) //很重要
return *this;
delete []ptr;
ptr=new int[size+1]; //整型数组! 不用strlen()!
size=obj.size;
for(i=0;i<size;i++)
{
ptr[i]=obj.ptr[i];
}
return *this;
}
// 5实现==的重载函数,使之可以判断两个数组是否相等
int array::operator ==(array &obj)
{
int count=0,i;
//如果两数组大小相等,继续比较数组元素是否相等。否则不等。
if(size==obj.size)
{
for(i=0;i<size;i++)
{
if(ptr[i]=obj.ptr[i]) //挨个比较数组元素是否相等。相等的话count自增1
count++;
}
if(count==size) //若最后count==size说明数组元素相等,否则不等
return 2;
else
return 3;
}
else
return 3;
}
// print
void array ::print ()
{
for(int i=0;i<size;i++)
cout<<ptr[i]<<" ";
cout<<endl<<endl;
}
//6 编程测试
int main()
{
array m(5),n(4),q(6);
cout<<"m:";
m.print();
cout<<"n:";
n.print();
cout<<"q:";
q.print();
m[1]=17;
cout<<"m[1]=17. m:";
m.print();
n=(n=q);
cout<<"把q的值赋给n后,n:";
n.print();
if((n==m)==2)
cout<<"n,m相等!"<<endl;
else
cout<<"n,m不等!"<<endl;
return 0;
}