Ich habe eine Matrix-Klasse, die [] [] verwendet, um auf Elemente zuzugreifen. Wenn ein (oder beide) Indizes außerhalb der Grenzen liegen, muss ich CIndexException auslösen. Es ist eine Klasse, die Text in diesem Format "Ungültiger Index [a] [b]" speichert, wobei a und b Zahlen sind.Ausnahmebedingung, wenn Array außerhalb der Grenzen ist
Dies ist meine aktuelle Implementierung von CIndexException Klasse
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;
}
};
Matrix als 2D-Array von Doppel dargestellt wird, ist es im Konstruktor initialisiert wird:
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;
}
}
einzelnes Element zu erhalten, ich überlastete [ ] Operator wie folgt aus:
double * operator[] (int x) const
{
return mat[x];
}
Wenn ich einen [2] [3], um diese Funktion re löst das erste [], gibt Zeiger auf ein Array zurück und das zweite [] wird wie üblich aufgelöst.
Ich kann leicht überprüfen, ob der erste Index außerhalb der Grenzen ist, aber ich habe Probleme beim Überprüfen der zweiten. Ich dachte daran, eine zweite Klasse, MatrixRow, zu erstellen, die eine Matrixzeile darstellt. Dann hätte ich MatrixRows. Um [] [] zum Laufen zu bringen, hätten beide Klassen den Operator [] überladen. Auf diese Weise wäre ich in der Lage, beide Indizes zu überprüfen, aber ich habe keine Ahnung, wie ich sie zu einer Ausnahme "verbinden" kann. Wie kann ich bei Verwendung dieses Designs beide Indizes im Ausnahmeobjekt melden?
Sie haben Ihre Frage bereits beantwortet, Sie müssen eine 'MatrixRow'-Klasse erstellen, den Operator' [] 'überladen, und Sie sind fertig. Was ist das Problem? – antonijn
Ich sehe keine Fragezeichen. – mfontanini
@antonijn - das Problem ist, dass die 'MatrixRow' Klasse beide in der Ausnahme verwendeten Indizes melden muss, aber normalerweise würde sie nur die Spalte kennen. –