Cita: Tomando como referencia tu ejemplo, si en la clase cArrayTest
fuera asi:
Código:
class CArrayTest
{
public:
CArrayTest(): numero(0){};
setNumber(unsigned char number){numero=number;};
CUnsignedChar& operator [](unsigned int i);
private:
unsigned int numero;
CUnsignedChar array[16][256];
};
Solo como detalle:
Código:
class CArrayTest
{
public:
CArrayTest(): numero(0){};
void setNumber(unsigned int number){numero=number;} // <--
CUnsignedChar& operator [](unsigned int i);
private:
unsigned int numero;
CUnsignedChar array[16][256];
};
Cita: No tendria algun comportamiento extraño la siguiente expresion?
CArrayTest temp;
temp[5]=10
temp.setNumber(5);
temp[5]=10
En realidad no, puesto que temp[5] en ambos casos sigue siendo un objeto
CUnsignedChar, lo único que se ha hecho es que ahora dispones de 4096 objetos de ese tipo y te vales de dos índices para accesarlos, uno que se establece a través de la función setNumber y el otro con la sobrecarga del operador de indexación. Lo anterior es lo mismo que:
Código:
temp[5]=10;
temp.setNumber(5);
temp[1285]=10; // es lo mismo que temp[256*5 + 5] = array[5][5]
Cita: o la siguiente?
CArrayTest *temp;
int variable;
variable=(*temp[0])|((*temp[1])<<8);
No me queda muy claro, para este caso declaras el puntero *temp pero no apunta a nada (tal vez sea por cuestión de ejemplo supongo). Pero entonces para usarlo podria ser algo asip:
Código:
CArrayTest *temp = new CArrayTest;
(*temp)[0] = 0;
(*temp)[1] = 1;
cout << ((*temp)[0] | ((*temp)[1] << 8)) << endl; // 256
temp->setNumber(16);
/** accesando al último elemento... **/
cout << ((*temp)[255] == (*temp)[4095]) << endl; // 1
delete temp;
Cita: Creo que esta claro lo que busco con ese codigo no?
No se si te refieres a la última línea que pusiste de código?
Salu2