Programación General > C/C++

 Sobrecarga del operador [ ]

(1/2) > >>

Epa:
Buenas

Alguien tiene idea si es posible sobrecargar el operador [ ] de forma matricial? (no vectorial)

La idea sera hacer algo como


--- Código: C++ --- class A{public:   int operator[][][](int x, int y, int z){      return matriz[x][y][z];   }private:   int ***matriz;};  
Lo probe pero me da el siguiente error:
error: la definición de la función no declara parámetros

Gracias de antemano
Saludos

Jeysscarr:
pasando vectores de N dimenciones, el compilador tiene que saber, por lo menos N-1 dimenciones, (un vector de N dimenciones = un vector de vectores de N-1 dimenciones...) asi sabe que memoria reservar...
lo mejor para inicializar una matriz en 0 es usar memset... osea

int matrix[5][7];

memset(matrix,0,sizeof(int)*5*7)
y al momento de pasar la matriz a una funcion, es mejor declarar un parametro del tipo int **, y dos params mas para cada una de las coordenadas...

(void TamañoMatriz(int **matrix, int n, int m) { memset(matriz, 0, sizeof(int)*n*m);}

Epa:
Buenas.

gracias por la respuesta, pero creo que no entendiste lo que pido.

Voy a tratar de explicarlo un poco mejor, haber si se entiende.

La calse que puse ahi, es de modo ilustrativo, era con la idea de que se entienda el concepto.
La clase real tiene una matriz de tres dimensiones de punteros a otra clase.
Algo como


--- Código: C++ --- class calse1{...private:   clase2 ****punteros;};  
la idea era poder sobrecargar el operador [ ] de la siguiente forma

--- Código: C++ --- const clase2* operator[][][](int x, int y, int z){   return punteros[x][y][z];}  para poder despues hacer algo como:

--- Código: C++ --- clase1[x][y][z]->metodoclase2();  
y evitar tener que hacer algo como:

--- Código: C++ --- clase2* clase1::getElemento(int x, int y, int z){   return punteros[x][y][z];}  para despues tener que hacer algo como:

--- Código: C++ --- clase2 * pclase2;pclase2 = clase1.getElemento(x,y,z);pclase2->metodoclase2();  
Creo que en todo caso haria algo como:

--- Código: C++ --- typedef struct{   int x,y,z;} coor; const clase2* operator[](coor c){   return punteros[c.x][c.y][c.z];}  
pero lo ideal es la primera opcion, ya que lo necesito para hacer bucles (bastante grandes), y me ahorro andar copiando las variables en la estructura para despues pasarla.

Bueno, espero que se entienda mejor la idea.
Saludos

Jeysscarr:
Si, definitivamente se entiende más lo que quieres decir  :P

diego.martinez:
El operador [] no se puede sobrecargar de forma matricial.
El operador [] es unario, solo acepta un parametro, por lo tanto, no puedes pasarle más.
Para hacer lo que quieres, es mejor que sobrecargues el operador ().
El opertador paréntesis si que acepta multiples parametros tal y como quieres hacer


--- Código: C++ --- DATO * operator ()(int a, int b, int c){return matrix[a][b][c];} 

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa