#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;
}


备份地址: 【重载特殊操作符:[]、=、==、!=