[][]を使用して要素にアクセスする行列クラスがあります。1つ(または両方)のインデックスが範囲外の場合、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;
}
};
行列はdoubleの2D配列として表され、コンストラクターで初期化されます。
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]と入力すると、この関数は最初の[]を解決し、配列へのポインターを返し、2番目の[]は通常どおり解決されます。
最初のインデックスが範囲外かどうかは簡単に確認できますが、2番目のインデックスを確認するのに問題があります。1行の行列を表す2番目のクラスMatrixRowを作成することを考えました。次に、MatrixRowsの配列があります。[] []を機能させるには、これらのクラスの両方でoperator[]がオーバーロードされます。そうすれば、両方のインデックスをチェックできますが、それらを1つの例外に「結合」する方法がわかりません。このデザインを使用しているときに、例外オブジェクトの両方のインデックスをレポートするにはどうすればよいですか?