Gast
2007-12-06, 16:52:57
Hi Leute,
ich glaube ich habe eine ungeheuerliche Entdeckung gemacht. Nehmen wir an, ich habe zwei Klassen, A und B. A hat einen Member x vom Typ int, B einen Member y ebenfalls vom Type int. Eine dritte Klasse C erbt von beiden und hat damit beide Member:
class A
{
private:
int x;
public:
int get_x() {return x;}
};
class B
{
private:
int y;
public:
int get_y() {return y;}
};
class C : public A, public B
{
//...
};
Sei nun pc ein Pointer auf eine Instanz von C, und seien bei dieser Instanz x=5 und y=1, d.h. pc->x=5 und pc->y=1. Jetzt konvertiere ich pc in einen Pointer vom Typ B* und frage den Wert von y ab:
B* base = (B*) pc;
int value_of_y = base->get_y();
Kann es sein, daß value_of_y dann nicht den Wert von y zugewiesen bekommt, sondern den von x? D.h. nicht 1 wird, sondern 5? Weil die Methode B::get_y() den Member y an der falschen Speicherposition erwartet, nämlich da wo der Instanz-Pointer (hier base) hinzeigt, während bei der Instanz von C der Member y aber eine Position weiter liegt?
Ich kriege nämlich immer 5 zurück, obwohl ich 1 erwartet hätte...
ich glaube ich habe eine ungeheuerliche Entdeckung gemacht. Nehmen wir an, ich habe zwei Klassen, A und B. A hat einen Member x vom Typ int, B einen Member y ebenfalls vom Type int. Eine dritte Klasse C erbt von beiden und hat damit beide Member:
class A
{
private:
int x;
public:
int get_x() {return x;}
};
class B
{
private:
int y;
public:
int get_y() {return y;}
};
class C : public A, public B
{
//...
};
Sei nun pc ein Pointer auf eine Instanz von C, und seien bei dieser Instanz x=5 und y=1, d.h. pc->x=5 und pc->y=1. Jetzt konvertiere ich pc in einen Pointer vom Typ B* und frage den Wert von y ab:
B* base = (B*) pc;
int value_of_y = base->get_y();
Kann es sein, daß value_of_y dann nicht den Wert von y zugewiesen bekommt, sondern den von x? D.h. nicht 1 wird, sondern 5? Weil die Methode B::get_y() den Member y an der falschen Speicherposition erwartet, nämlich da wo der Instanz-Pointer (hier base) hinzeigt, während bei der Instanz von C der Member y aber eine Position weiter liegt?
Ich kriege nämlich immer 5 zurück, obwohl ich 1 erwartet hätte...