遇到一道笔试题:设计一个矩阵类,行和列数通过构造函数输入,支持a[][]取值和赋值。
这实际上就是一个二维数组下标运算符重载的问题,解决思路如下:
(1)用一维数组代替二维数组分配内存,从而获得连续的内存空间,取值时通过计算获得相应行和列上的值
(2)设计两个类,分别重载operator[],一个获取行,一个获取列
实现如下:
代码class MatrixEntry{
friend class Matrix; //友元类,访问私有变量m_currentRow
public:
MatrixEntry(int m, int n) : m_row(m), m_col(n)
{
m_pMatrix = new int[m * n * sizeof(int)];
}
~MatrixEntry()
{
delete m_pMatrix;
}
int & operator[](int col)
{
return m_pMatrix[m_currentRow * m_col + col];
}
private:
int * m_pMatrix; //存储矩阵的一维数组
int m_row; //矩阵的行数
int m_col; //矩阵的列数
int m_currentRow; //指示当前需要访问哪一行,该值由下面的Matrix类设置
};
class Matrix{
public:
Matrix(int m, int n) : m_entry(m, n)
{
}