詳解c++中對二維數組下標[][]的重載


首先定義一個矩陣類,我用一個二維數組存儲矩陣中的數據,矩陣詳細定義如下

class Matrix { public: Matrix(int rows, int cols) { _rows = rows; _cols = cols; array = new int*[rows]; for (int i = 0; i < rows;i++) { array[i] = new int[cols]; } } ~Matrix() { for (int i = 0; i < _rows;i++) { delete[] array[i]; } delete[] array; } //重載[]符號
    int* operator[](int row) { return array[row]; } private: int _rows; int _cols; int** array; };

 試一試效果,能程序能不能執行成功

//試一試效果
int main() { Matrix mat(3, 4); mat[1][1] = 1; cout << mat[1][1] << endl; }

 結果:

解惑:

我的同學可能會有疑惑:明明只重載了一個"[]",可是在使用的時候用的卻是"[][]",為何程序能夠執行成功?

我一開始就是這么想的,想了好久,最后終於靈機一動,知道了原因,如下:

    //mat[1][1] = 1; //我們可以把這一句分為兩句 //step1
    int* p = mat[1];        //此處等號右邊返回的就是array[1]的地址,用到了操作符重載,p是一個指向int類型對象的指針 //step2
    p[1] = 1;                //此處沒有用到操作符重載,別忘了,[]符號本身就對指針具有提領作用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM