• Jueves 14 de Noviembre de 2024, 03:54

Autor Tema:  Sobrecarga del operador [ ]  (Leído 2473 veces)

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Sobrecarga del operador [ ]
« en: Lunes 7 de Junio de 2010, 17:12 »
0
Buenas

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

La idea sera hacer algo como

Código: C++
  1.  
  2. class A{
  3. public:
  4.    int operator[][][](int x, int y, int z){
  5.       return matriz[x][y][z];
  6.    }
  7. private:
  8.    int ***matriz;
  9. };
  10.  
  11.  

Lo probe pero me da el siguiente error:
error: la definición de la función no declara parámetros

Gracias de antemano
Saludos
The sweet smell of a great sorrow lies over the land.


Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: Sobrecarga del operador [ ]
« Respuesta #1 en: Martes 8 de Junio de 2010, 00:48 »
0
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);}
Nuestro poder está creciendo mas rápido que nuestra sabiduria

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Sobrecarga del operador [ ]
« Respuesta #2 en: Martes 8 de Junio de 2010, 04:03 »
0
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++
  1.  
  2. class calse1
  3. {
  4. ...
  5. private:
  6.    clase2 ****punteros;
  7. };
  8.  
  9.  

la idea era poder sobrecargar el operador [ ] de la siguiente forma
Código: C++
  1.  
  2. const clase2* operator[][][](int x, int y, int z){
  3.    return punteros[x][y][z];
  4. }
  5.  
  6.  
para poder despues hacer algo como:
Código: C++
  1.  
  2. clase1[x][y][z]->metodoclase2();
  3.  
  4.  

y evitar tener que hacer algo como:
Código: C++
  1.  
  2. clase2* clase1::getElemento(int x, int y, int z){
  3.    return punteros[x][y][z];
  4. }
  5.  
  6.  
para despues tener que hacer algo como:
Código: C++
  1.  
  2. clase2 * pclase2;
  3. pclase2 = clase1.getElemento(x,y,z);
  4. pclase2->metodoclase2();
  5.  
  6.  

Creo que en todo caso haria algo como:
Código: C++
  1.  
  2. typedef struct
  3. {
  4.    int x,y,z;
  5. } coor;
  6.  
  7. const clase2* operator[](coor c){
  8.    return punteros[c.x][c.y][c.z];
  9. }
  10.  
  11.  

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
The sweet smell of a great sorrow lies over the land.


Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: Sobrecarga del operador [ ]
« Respuesta #3 en: Martes 8 de Junio de 2010, 04:10 »
0
Si, definitivamente se entiende más lo que quieres decir  :P
Nuestro poder está creciendo mas rápido que nuestra sabiduria

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Sobrecarga del operador [ ]
« Respuesta #4 en: Martes 8 de Junio de 2010, 10:19 »
0
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++
  1.  
  2. DATO * operator ()(int a, int b, int c)
  3. {
  4. return matrix[a][b][c];
  5. }
  6.  

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Sobrecarga del operador [ ]
« Respuesta #5 en: Martes 8 de Junio de 2010, 23:31 »
0
Funciona barbaro!
Nunca se me hubiese ocurrido algo asi.

Muchas gracias  :beer:
The sweet smell of a great sorrow lies over the land.