#include "iostream"
#include <cstdio>
#include <cstdlib>
using namespace std;
class Array
{
private:
int mLength;
int* mSpace;
public:
Array(int length=0);
Array(const Array& obj);
int length();
void setData(int index, int value);
int getData(int index);
int& operator[](int N);
bool operator==(Array & obj);
bool operator!=(Array & obj);
Array& operator=(Array & obj);
~Array();
};
Array::Array(int length)
{
if( length < 0 )
{
length = 0;
}
mLength = length;
mSpace = new int[mLength];
}
Array::Array(const Array& obj)
{
mLength = obj.mLength;
mSpace = new int[mLength];
for(int i=0; i<mLength; i++)
{
mSpace[i] = obj.mSpace[i];
}
}
int Array::length()
{
return mLength;
}
void Array::setData(int index, int value)
{
mSpace[index] = value;
}
int Array::getData(int index)
{
return mSpace[index];
}
Array::~Array()
{
mLength = -1;
delete[] mSpace;
}
int& Array::operator[](int N)
{
return mSpace[N];
}
Array& Array::operator=(Array & obj)
{
if(mSpace != NULL)
delete[] mSpace;
mLength = obj.mLength;
mSpace = new int[mLength];
for(int i=0; i<mLength; i++)
{
mSpace[i] = obj.mSpace[i];
}
return *this;
}
bool Array::operator==(Array & obj)
{
int i=sizeof(mSpace)/sizeof(int);
int j=sizeof(obj.mSpace)/sizeof(int);
if (i == j)
{
for(int k=0;k<i;k++)
{
if(mSpace[k]!=obj.mSpace[k])
return false;
}
return true;
}
else
{
return false;
}
}
bool operator!=(Array & obj)
{
return !(*this==obj);
}
int main()
{
Array a1(10);
Array a3(10);
for(int i=0; i<a1.length(); i++)
{
//a1.setData(i, i);
a1[i] = i;
a3[i] = i+1;
}
for(int i=0; i<a1.length(); i++)
{
//printf("array %d: %d\n", i, a1.getData(i));
printf("array a1[%d]: %d\n", i, a1[i]);
}
Array a2 = a1;//copy构造
for(int i=0; i<a2.length(); i++)
{
printf("array a2[%d]: %d\n", i, a2.getData(i));
}
if (a3==a1)
{
printf("相等\n");
}
else
{
printf("不相等\n");
}
Array a4;
a4=a3 = a2; //执行=操作
for(int i=0; i<a3.length(); i++)
{
printf("array a3[%d]: %d\n", i, a3[i]);
printf("array a4[%d]: %d\n", i, a3[i]);
}
system("pause");
return 0;
}
备份地址: 【重载特殊操作符:[]、=、==、!=】