私は次のクラスを持っています:
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;
私はこれが悪い習慣であることを知っています。しかし、好奇心から:これは動作することが保証されていますか? それは定義された動作ですか?
おまけの質問: こんな醜いハックを使わなければならなかったことはありますか?