多维数组下标操作符重载一法

 

 

 

  刚学习C++操作符重载时,我就想过如何重载多维下标操作符“[][]”的问题,这里仅就二维的特殊情况提出一种方法,希望可以起到抛砖引玉的作用。

  我们假设有一个Matrix类用来封装矩阵,并希望用[][]来取得矩阵对应位置的元素值。分析一下m.[a][b],可以看做是m.operator [a].operator [b]。所以要让第一个[]返回一个也重载了[]的辅助类,再把a传到那个辅助类中,想办法在后一个类的[]中实现对应元素的返回。代码如下(忽略了其他成员函数和越界检查):

class assis//辅助类
{
public:
int operator [](int index)
{
index2=index-1;
return pdata[index1*ncol+index2];
};
int * pData;
int index1,index2;
int ncol,nrow;
};
class Matrix//
矩阵类
{
public:
...//
其他成员函数
assis operator [](int index)
{
assis ret;
ret.pData=pData;
ret.ncol=ncol;
ret.nrow=nrow;
ret.index1=index-1;
return ret;
};
private:
int * pData;
int nrow,ncol;
...//
其他成员变量
};
  如果哪位读者有其他更好的办法,请来信与我交流。