详解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