O membro privado hacking é um comportamento definido?
Eu tenho a seguinte classe:
class BritneySpears
{
public:
int getValue() { return m_value; };
private:
int m_value;
};
O que é uma biblioteca externa (que não posso mudar). Eu obviamente não posso mudar o valor dem_value
, apenas leia. Mesmo derivado deBritneySpears
não vai funcionar.
E se eu definir a seguinte classe:
class AshtonKutcher
{
public:
int getValue() { return m_value; };
public:
int m_value;
};
E então faça:
BritneySpears b;
// Here comes the ugly hack
AshtonKutcher* a = reinterpret_cast<AshtonKutcher*>(&b);
a->m_value = 17;
// Print out the value
std::cout << b.getValue() << std::endl;
Eu sei que isso éruim prática. Mas apenas por curiosidade:isso é garantido para o trabalho? É um comportamento definido?
Pergunta bônus: você já teve que usar um truque tão feio?
Edit: Apenas para assustar menos pessoas: não pretendo realmente fazer isso emreal código. Estava só a pensar ;)