Implementacion "operator []" de una matriz

saclosa
14 de Mayo del 2008
¿Como debo implementar el "operator []" de una matriz sobre UN SOLO vector para poder usarlo: m [i][j]?

Creo que tengo que implementar dos operator's [] o algo asi


gracias

rolan2kn
14 de Mayo del 2008
Mira, si entiendo tu pregunta lo que quieres hacer, es que tienes una clase matriz y quieres implementarle el operador[] de manera que lo puedas usar matriz[][].


Bueno eso lo puedes hacer, te explicare la manera en que yo lo hago, quiza haya otra mejor, pero bueno....

tienes
class Matrix
{
private:
int** table;
int fil, col;
public:
.........
int* operator[](int _fil)
{
if(_fil > -1 && _fil < fil)
return table[_fil];
}
} ;

esto resuelve tu problema, que sucede: como has asignado memoria al arreglo bidimensional table, en forma de un arreglo de arreglos (esto es table = new int*[fil]), puedes acceder al arreglo que esta en la posicion _fil y como retornas un arreglo le puedes pedir el elemento de la posicion _col. Ej:
Matriz m;
int* x = m[0] ; // esto retorna la fila 0
int elem = x[5]; // esto retorna el elemento 6 del arreglo
int elem2 = m[0][5]; // esto retorna la fila de la posicion 0 y a la fila le pide el elemento dela posicion 5.


kike
14 de Mayo del 2008
Ya e solucionado el problema y como dice roland2kn si te da el valor pero el segundo parametro no lo controlas, y cualquiera que use esa clase va a tener fallos de seguridad... como el segundo parametro sea mayor que su rango, la unica forma de hacerlo es haciendo una clase intermedia y sobrecargar el operador [] en las 2

kike
14 de Mayo del 2008
Si lo soluciona pero como controlas la j es decir el 2 parametro, no te comprueba el valor de la j si te pasa del tamaño, hay un error de seguridad, iva a preguntar lo mismo, yo tengo esa parte implementada, pero quiero controlar la j, nose de que forma hacerlo...