Cita: El objetoX no es un array de objetosX, en realidad es solo un objeto con el operador de indexacion sobrecargado. Dentro de la clase del objeto hay un array, al cual quiero accesar de esta manera, como un array. Entonces, al devolver el puntero this estas devolviendo un elemento de un array de objetosX lo cual no es.
No se si me explico.
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.