Implementacion "operator []" de una matriz
¿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
Creo que tengo que implementar dos operator's [] o algo asi
gracias
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.
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.
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