[C++]多维数组下标操作符重载一法

      编程资料 2004-12-19 18:41
多维数组下标操作符重载一法



  刚学习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;
...//其他成员变量
};


标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}