У меня есть следующий класс:
class BritneySpears
{
public:
int getValue() { return m_value; };
private:
int m_value;
};
Какая внешняя библиотека (которую я не могу изменить). Я, очевидно, не могу изменить значение m_value
, только прочитал его. Даже вывод из BritneySpears
не будет работать.
Что делать, если я определяю следующий класс:
class AshtonKutcher
{
public:
int getValue() { return m_value; };
public:
int m_value;
};
И затем выполните:
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;
Я знаю, что это плохой. Но просто из любопытства: гарантировано ли это? Определено ли это поведение?
Бонусный вопрос: вам когда-нибудь приходилось использовать такой уродливый хак?