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 ;

Antworten auf die Frage(12)

Ihre Antwort auf die Frage