J'essaie de convertir un objet de classe de base en objet de classe dérivé avec dynamic_cast
, mais dynamic_cast
renvoie null. Est-il possible de baisser en utilisant dynamic_cast
?La rétrogradation à l'aide de dynamic_cast renvoie la valeur nulle
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;
}
}
Ce code affiche "aucune valeur".
FYI coulée * vers le bas * la chaîne d'héritage est appelée coulée vers le bas. – NathanOliver
Vous ne pouvez pas obtenir un B à partir d'un A, que ferait le langage si, par ex. Les instances B comptaient plus de membres de données que d'instances A? –
Vous ne pouvez pas baisser 'a' à' B * ', car il ne pointe pas sur un' B', il pointe sur un 'A':' A' n'est pas un 'B'. Vous pourriez cependant lancer un 'B *' à un 'A *' parce que le 'B *' pointerait sur un B, lequel "est un" A (définition de l'héritage) – KABoissonneault