Angenommen, ich habe:Sollte ich erwarten, dass Upcasts und Downcasts bei der einzelnen Vererbung den Zeiger nicht anpassen?
class Base {
public:
virtual void Nothing() {}
};
class MiddleDerived : public Base {
virtual void Nothing() {}
};
class Derived : public MiddleDerived {
virtual void Nothing() {}
};
und mein Code sieht wie folgt aus:
Derived* object = new Derived();
Base* base = object; //implicit conversion here
void* derivedVoid = object;
void* baseVoid = base;
Sollte ich erwarten, dass baseVoid == derivedVoid
?
Ich weiß, dass die meisten Implementierungen auf diese Weise arbeiten, aber ist es garantiert?
Überlegen Sie, "Sprachanwalt" für "Portabilität" zu ersetzen? – Bathsheba
Während Sie die Frage (und nicht das Beispiel) formuliert haben, haben Sie die Möglichkeit offen gelassen, dass die Basisklasse keine virtuellen Methoden hat (während einige abgeleitete Klassen dies tun). Das könnte noch "Single-Vererbung" sein, aber die Zeiger wären ** nicht ** gleich. Für Ihr ** Beispiel ** bin ich kein gut genug Sprachanwalt, um meine Überzeugung zu bestätigen, dass es nur in der üblichen Praxis wahr ist, nicht vom Standard versprochen. – JSF
Ich denke, das sollte funktionieren, aber ich glaube nicht, dass es ein Standard-Layout für Nicht-POD-Klassen gibt. – NathanOliver