Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Duda operadores de clase (https://www.clubdelphi.com/foros/showthread.php?t=77697)

waremovil 20-02-2012 12:36:32

Duda operadores de clase
 
Hola, no sé si es que no entiendo bien el uso de operadores sobrecargados,
pero no consigo usarlos.

Intento poder acceder a un elemento mediante el operador [], pero que el tipo del
elemento sea distinto del tipo de la clase.

Os pongo un ejemplo básico, defino la siguientes clase:

Código:

class miClase
{
        private:
                int a[2];
        public:
                miClase() { a[0] = 1; a[1] = 2;}
                int & operator[] (int pos){ return a; }
};

void main()
{
    miClase * z = new miClase();
    int b = z[1];
}

Supuestamente podría acceder al elemento número [1] y obtener un valor de tipo INT tal y como
defino en mi operador de clase

pues todo lo contrario, obtengo error de compilación "E2034 Cannot convert 'miClase' to 'int'

¿alguien sabe que hago mal?

gracias

waremovil 21-02-2012 14:19:34

alguna idea? :)

roman 21-02-2012 17:51:34

Pues a ver, de esto no sé gran cosa, pero de entrada, el operador debería regresar una entrada del arreglo y no todo el arreglo ¿no? Tampoco entiendo el uso de los apuntadores, ¿por qué no devuelves directamente la entrada?

Prueba así:

Código:

class miClase
{
        private:
                int a[2];
        public:
                miClase()
                {
                        a[0] = 1;
                        a[1] = 2;
                }
               
        int operator[] (int pos){ return a[pos]; }
};

int main(int argc, char *argv[])
{
    miClase * z = new miClase();
    int b = (*z)[1];
}

// Saludos

escafandra 21-02-2012 21:50:26

El error es que estás aplicando el operador [] a un puntero no a un objeto de la clase. Cuando se aplica a un puntero funciona como un índice.

Fíjate en esta implementación:

Código:

class miClase
{
        private:
                int a[2];
        public:
                miClase() { a[0] = 1; a[1] = 2;}
                int& operator[] (int i){ return a[i]; }
};

void main()
{
  miClase z;        // esto en C++ es perfectamente válido y muy útil.
  int b = z[1];
}

o en esta como apuntó roman. Un poco mas engorrosa pero con punteros:
Código:

void main()
{
  miClase *z = new miClase;
  int b = (*z)[1];  // Aplicamos el operador [] a un objeto no a un puntero.
}

Tu decides según tus necesidades.


Saludos.

waremovil 22-02-2012 08:58:46

efectivamente ese era el problema

muchas gracias


La franja horaria es GMT +2. Ahora son las 12:02:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi