前面學習了操作符重載,現在我們來寫個例子測試下。
#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這樣的橫等式時候成立。