我有一个矩阵类,它使用[] []访问元素。当一个(或两个)索引超出范围时,我必须抛出CIndexException。这是一个以“无效索引[a] [b]”格式存储文本的类,其中a和b是数字。
这是我当前的CIndexException类的实现
class CIndexException
{
string text;
public:
CIndexException (int a, int b)
{
ostringstream oss;
oss << "Invalid index [";
oss << a;
oss << "][";
oss << b;
oss < "]";
text = oss.str();
}
string get() const
{
return text;
}
};
矩阵表示为2D的 double 数组,它在构造函数中初始化:
CMatrix(int r, int c)
{
colls = c;
rows = r;
mat = new double * [rows];
for (int i = 0; i < rows; i++)
{
mat[i] = new double [colls];
for (int j = 0; j < colls; j++)
mat[i][j] = 0;
}
}
为了获得单个元素,我像这样重载了[]运算符:
double * operator[] (int x) const
{
return mat[x];
}
当我键入a [2] [3]时,此函数解析第一个[],返回指向数组的指针,而第二个[]照常解析。
我可以轻松地检查第一个索引是否超出范围,但是在检查第二个索引时遇到了麻烦。我想创建第二个类MatrixRow,它代表矩阵的一行。然后,我将拥有MatrixRows数组。为了使[] []正常工作,这两个类都必须重载operator []。这样,我将能够检查两个索引,但是我不知道如何将它们“联接”为一个异常。使用此设计时,如何报告异常对象中的两个索引?
最佳答案
使用MatrixRow
解决方案,但将行的索引作为构造函数参数传递给每个MatrixRow
。 MatrixRow
可以保存该数字,并将其用于它生成的任何异常消息中。
关于c++ - 当数组超出范围时抛出异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15599753/