Simplemente echarlo, cambiar la memoria y devolver. (no compiló el código, pero debería tener la idea).
class Bla
{
public:
Bla() : x(15), str("bla") {}
private:
int x;
std::string str;
}
int main()
{
Bla bla;
int x = *((int*)(&bla));
std::string str = *((std::string*)((int*)(&bla) + 1));
std::cout << x << str;
return 0;
}
Dado que esta es una pregunta de la entrevista, no entraré en por qué no debes hacer eso. :)
EDITAR: Las clases con funciones virtuales también tendrán un puntero de tabla virtual en alguna parte. No estoy seguro si & le dará la dirección de vt o la dirección del primer miembro de datos.
La alineación es 4 por defecto (¿no?), Por lo que si el miembro que está leyendo no se alinea, cambie 2 bytes para pasar al siguiente.
Fue una entrevista de preguntas. No podía pensar en otra forma que no fuera hacer algún truco editable con la manipulación del puntero. Tomando la dirección del objeto, desplazamiento de la variable y luego imprímala ... Pero no estaba seguro de si el desplazamiento del varibale podría obtenerse correctamente. – Sandeep
¿Quién es este empleador que le está pidiendo que abuse de su compilador? –
La respuesta correcta es "do not". Podría declarar una clase de amigo para hacer esto, pero es un diseño bastante pobre para hacerlo. –