题目:
扩展例题"可变长数组类(CArray)"的功能:
1.为可变长数组类(CArray)添加如下两个成员函数,判断两个CArray类的对象是否相等。只有当两
个数组的长度相等,并且对应的每个数组元素都相等时,两个CArray类的对象才相等。
bool operator ==(const CArray &);//相等返回true
bool operator !=(const CArray &);//不相等返回true
2.重载流插入运算符<<,可以直接输出CArray类的对象。(输出每个数组元素)
实现代码:
#include<iostream>
#include<cstring>
using namespace std;
class CArray
{
int size;//数组元素个数
int*ptr;//指向动态分配的数组
public:
CArray()
{
ptr=NULL;
size=0;
}
CArray(int s)
{
if(s==0)
{
ptr=NULL;
}
else
{
ptr=new int[s];
}
}//开空间的过程
CArray(CArray &a)//将a数组赋予到类中
{
if(!a.ptr)
{
ptr=NULL;
size=0;
return;
}
else
{
ptr=new int[a.size];
memcpy(ptr,a.ptr,sizeof(int)*a.size);
size=a.size;
}
}
~CArray()//析构函数
{
if(ptr)
{
delete []ptr;
}
}
void push_back(int v)//在数组尾部添加一个元素/
{
if(ptr)
{
int*tmpPtr=new int[size+1];
memcpy(tmpPtr,ptr,sizeof(int)*size);
delete []ptr;
tmpPtr[size]=v;
ptr=tmpPtr;
size=size+1;
}
else
{
ptr=new int[1];
ptr[size]=v;
size=size+1;
}
}
CArray &operator=(const CArray & a)
{
if(ptr==a.ptr)
{
return *this;
}
if(a.ptr==NULL)
{
if(ptr)
{
delete[]ptr;
}
ptr=NULL;
size=0;
return *this;
}
if(size<a.size)
{
if(ptr)
{
delete []ptr;
}
ptr=new int[a.size];
}
memcpy(ptr,a.ptr,sizeof(int)*a.size);
size=a.size;
return *this;
}
int length()
{
return size;
}
int &operator[](int i)
{
return ptr[i];
}
bool operator==(const CArray &);
bool operator!=(const CArray &);
friend ostream& operator<<(ostream& os,CArray& a)
{
for(int i=0;i<a.size;i++)
{
os<<a[i]<<",";
}
cout<<endl;
return os;
}
};
bool CArray::operator==(const CArray& a)
{
if(size==a.size)
{
for(int i=0;i<size;i++)
{
if(ptr[i]!=a.ptr[i])
{
return false;
}
}
return true;
}
else
{
return false;
}
}
bool CArray::operator !=(const CArray& a)
{
if(size!=a.size)
{
return true;
}
else
{
for(int i=0;i<size;i++)
{
if(ptr[i]!=a.ptr[i])
{
return true;
}
}
}
return false;
}
int main()
{
CArray a;
for(int i=0;i<5;++i)
{
a.push_back(i);
}
CArray a2,a3;
a2=a;
cout<<a2;
a2=a3;
cout<<a2;
a[3]=100;
CArray a4(a);
cout<<a4;
cout<<(a2==a3);
cout<<endl;
cout<<(a2!=a3);
cout<<endl;
return 0;
}