Hackt ein privates Mitglied ein bestimmtes Verhalten?
Ich habe die folgende Klasse:
class BritneySpears
{
public:
int getValue() { return m_value; };
private:
int m_value;
};
Welche ist eine externe Bibliothek (die ich nicht ändern kann). Ich kann den Wert von @ offensichtlich nicht ändem_value
, lies es nur. Sogar abgeleitet vonBritneySpears
wird nicht funktionieren.
Was passiert, wenn ich die folgende Klasse definiere:
class AshtonKutcher
{
public:
int getValue() { return m_value; };
public:
int m_value;
};
Und dann mache:
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;
Ich weiß, das istSchlech trainieren. Aber nur aus Neugier:wird dies garantiert funktionieren? Ist es definiertes Verhalten?
Bonus Frage: Musstest du jemals so einen hässlichen Hack benutzen?
Edit: Nur um weniger Leute zu erschrecken: Ich habe nicht vor, dies tatsächlich in @ zu tuech code. Ich wundere mich nur ;