操作符重載的應用(數組類)

前面學習了操作符重載,現在我們來寫個例子測試下。

#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這樣的橫等式時候成立。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章