当数组超出范围时抛出异常

isk*_*nar 5 c++

我有一个矩阵类,使用[] []来访问元素.当一个(或两个)索引超出范围时,我必须抛出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;
     }
};
Run Code Online (Sandbox Code Playgroud)

Matrix表示为二维的二维数组,它在构造函数中初始化:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

为了获得单个元素,我重载了[]运算符,如下所示:

double * operator[] (int x) const
{
    return mat[x];
}
Run Code Online (Sandbox Code Playgroud)

当我输入[2] [3]时,此函数解析第一个[],返回指向数组的指针,第二个[]像往常一样解析.

我可以很容易地检查第一个索引是否超出界限,但是我无法检查第二个索引.我想到了创建第二类MatrixRow,它代表一行矩阵.然后我会有阵列的MatrixRows.要使[] []工作,这两个类都会重载operator [].这样我就可以检查两个索引,但我不知道如何将它们"连接"成一个异常.在使用此设计时,如何在异常对象中报告两个索引?

Ern*_*ill 3

采用您的MatrixRow解决方案,但将行的索引MatrixRow作为构造函数参数传递给每个解决方案。可以MatrixRow保存该数字,并在其生成的任何异常消息中使用它。