Ho una classe matrice, che utilizza [] [] per accedere agli elementi. Quando uno (o entrambi) indici sono fuori limite, devo lanciare CIndexException. È una classe che memorizza il testo in questo formato "Invalid index [a] [b]", dove aeb sono numeri.Eccezione di lancio quando la matrice è fuori limite
Questo è il mio attuale implementazione della classe 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;
}
};
Matrix è rappresentato come una matrice 2D di doppi, viene inizializzato nel costruttore:
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;
}
}
Per ottenere singolo elemento, ho sovraccaricato [ ] esercente simili:
double * operator[] (int x) const
{
return mat[x];
}
Quando si digita una [2] [3], questa funzione re risolve il primo [], restituisce il puntatore a un array e il secondo [] viene risolto come al solito.
Posso facilmente controllare se il primo indice è fuori dai limiti, ma ho problemi a controllare il secondo. Ho pensato di creare una seconda classe, MatrixRow, che rappresenta una riga di matrice. Quindi avrei array di MatrixRows. Per ottenere [] [] lavorando, entrambe le classi avrebbero un operatore sovraccarico []. In questo modo sarei in grado di controllare entrambi gli indici, ma non ho idea di come "unirli" in un'unica eccezione. Come posso segnalare entrambi gli indici nell'oggetto eccezione mentre si utilizza questo disegno?
Hai già risposto alla tua domanda, devi creare una classe 'MatrixRow', sovraccaricare l'operatore' [] 'e hai finito. Qual è il problema? – antonijn
Non vedo punti interrogativi. – mfontanini
@antonijn - il problema è che la classe 'MatrixRow' deve riportare entrambi gli indici usati nell'eccezione, ma normalmente conoscerebbe solo la colonna. –