Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/07/2007, 19:08
Avatar de Instru
Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: Doble sobrecarga de operadores en C++

Cita:
Iniciado por fightmx Ver Mensaje
Parece que entendí.

Pues por lo que veo parte del problema lo causa el no poder sobrecargar el operador de asignación mas que solo a través de una clase, y dado que ClaseX[123] no es un objeto de alguna clase que hayamos definido pues simplemente no estamos en condiciones de hacerlo (creo), a menos claro, que ClaseX[123] sea de algun tipo que definamos a partir de una nueva clase y que esta a su vez almacene un miembro con el tipo de dato requerido, digamos un miembro unsigned char como lo planteaste.

El siguiente es un ejemplo muy simple de lo que trate de decir , el punto clave rádica en el uso del operador de conversión el cual sirve para poder hacer un casting de nuestro objeto a algún tipo built-in, en fin puedes buscar info a traves de "conversion operators", espero te sirva.
Código:
#include <iostream>

using std::cout;
using std::endl;
typedef unsigned char u_char;

class CUnsignedChar
{
      public:
             CUnsignedChar():c('*'){};
             CUnsignedChar& operator =(const u_char m);
             operator u_char() /** conversion operator **/
             {
                return c;
             }
      private:
               u_char c;
};

CUnsignedChar& CUnsignedChar::operator =(const u_char m)
{
    c = m;
    return *this;
}

class CArrayTest
{
      public:
             CUnsignedChar& operator [](unsigned int i);
      private:
             CUnsignedChar array[256];
};

CUnsignedChar& CArrayTest::operator [](unsigned int i)
{
    return array[i];
}

int main()
{
    CArrayTest myArray;
    u_char variable;
    int i;
    char *p = NULL;
    
    char message[] = "Mensaje de prueba... ";
    p = message;
    /*** Asignacion tipo claseX[123] = variable ***/
    while (*p)
    {
          myArray[p - message] = *p;
          p++;
    }  
    /*** Asignacion tipo variable = claseX[123]  ***/
    for (i = 0; i < 256; i++)
    {
        variable = myArray[i];
        cout << variable; /** mostrar dato **/
    }
    getchar();
    return 0;   
}
Un saludo.
Wow!. Si, asi. yo no sabía que se podian sobrecargar los castings.
Pero si, asi es como lo necesito.

Muchisimas Gracias.

Saludos