Ich versuche, ein Basisklassenobjekt zu einem abgeleiteten Klassenobjekt mit dynamic_cast
zu werfen, aber dynamic_cast
gibt null zurück. Ist es möglich, mit dynamic_cast
zu reduzieren?Downcasting mit dynamic_cast gibt null
struct A {
virtual ~A() {}
};
struct B : A {};
int main()
{
A* a = new A();
B* b = dynamic_cast<B*>(a);
if(b){
std::cout << "b has value" << std::endl;
}else{
std::cout << "no value" << std::endl;
}
}
Dieser Code gibt "keinen Wert" aus.
FYI casting * down * die Vererbungskette wird Down Casting genannt. – NathanOliver
Sie können kein B von einem A erhalten, was würde die Sprache tun, wenn z. B-Instanzen hatten mehr Datenelemente als A-Instanzen? –
Sie können 'a' nicht auf' B * 'reduzieren, da es nicht auf ein' B' zeigt, sondern auf ein 'A':' A' ist kein 'B'. Sie könnten jedoch ein 'B *' in ein 'A *' umwandeln, weil das 'B *' auf ein B zeigt, das "A" ist (Definition der Vererbung) – KABoissonneault