首先定义一个矩阵类,我用一个二维数组存储矩阵中的数据,矩阵详细定义如下

class Matrix
{
public:
Matrix(int rows, int cols)
{
_rows = rows;
_cols = cols;
array = new int*[rows];
for (int i = ; i < rows;i++)
{
array[i] = new int[cols];
}
}
~Matrix()
{
for (int i = ; 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(, );
mat[][] = ;
cout << mat[][] << endl;
}

结果:

详解c++中对二维数组下标[][]的重载-LMLPHP

解惑:

我的同学可能会有疑惑:明明只重载了一个"[]",可是在使用的时候用的却是"[][]",为何程序能够执行成功?

我一开始就是这么想的,想了好久,最后终于灵机一动,知道了原因,如下:

    //mat[1][1] = 1;        //我们可以把这一句分为两句
//step1
int* p = mat[]; //此处等号右边返回的就是array[1]的地址,用到了操作符重载,p是一个指向int类型对象的指针
//step2
p[] = ; //此处没有用到操作符重载,别忘了,[]符号本身就对指针具有提领作用
05-11 16:06