前面学习了操作符重载,现在我们来写个例子测试下。
#include <cstdlib>
#include <iostream>
using namespace std;
class Array
{
private:
int mLength;
int* mSpace;
public:
Array(int len)
{
if (len < 0)
{
len = 0;
}
mLength = len;
mSpace = new int[mLength];
}
~Array()
{
mLength = -1;
delete[] mSpace;
}
Array(const Array& obj)
{
mLength = obj.mLength;
mSpace = new int[mLength];
for (int i = 0; i < mLength; i++)
{
mSpace[i] = obj.mSpace[i];
}
}
int Length()
{
return mLength;
}
int& operator[](int i)
{
return mSpace[i];
}
Array& operator=(const Array& obj)
{
delete[] mSpace;
mLength = obj.mLength;
mSpace = new int[mLength];
for (int i = 0; i < mLength; i++)
{
mSpace[i] = obj.mSpace[i];
}
return *this;
}
};
int main(int argc, char *argv[])
{
Array a1(10);
Array a2(0);
Array a3(0);
//a3 = a2 = a1;
for (int i = 0; i < a1.Length(); i++)
{
a1[i] = i + 1;
}
for (int i = 0; i < a1.Length(); i++)
{
printf("%d\n",a1[i]);
}
system("PAUSE");
return EXIT_SUCCESS;
}
上面实现了数组的基本操作,这里需要说明的是,为什么我们要重载“=”,在每个类中,编译器会默认为我们提供一个“=”号的重载,但是仅仅是数据的关联;跟系统提供的拷贝构造函数一样,如果我们不主动重写,那么会在程序拷贝的时候出问题,这里“=”为什么返回引用呢?主要是为了a1=a2=a3这样的横等式时候成立。