2009-09-11 6 views

Répondre

4

Il vous permet d'identifier le type dynamique d'un objet lors de l'exécution. Par exemple:

class A 
{ 
    virtual ~A(); 
}; 

class B : public A 
{ 
} 

void f(A* p) 
{ 
    //b will be non-NULL only if dynamic_cast succeeds 
    B* b = dynamic_cast<B*>(p); 
    if(b) //Type of the object is B 
    { 
    } 
    else //type is A 
    { 
    } 
} 

int main() 
{ 
    A a; 
    B b; 

    f(&a); 
    f(&b); 
} 
2

Fonctionnalité dynamic_cast - votre code peut détecter à l'exécution si un pointeur ou une référence donnée est réellement lié à un objet de type attendu.

2

Le nom correct est Run-time type information (RTTI).

+0

+1 Je n'ai jamais vu "lmgtfy" avant =) Grande ressource, vraiment =) – SadSido

+0

S'il vous plaît expliquer les downvotes faites à ce post. Downvoting sans commentaires n'est pas juste. –

4

Il ne s'agit pas seulement de dynamic_cast, mais de tout le RTTI qui en fait partie. Le meilleur endroit pour en apprendre davantage sur RTTI est la section 15.4 de la C++ Programming Language par Bjarne Stroustrup

+0

Dans la quatrième édition, il s'agit du chapitre 22. – user1794469

0

Vous pouvez prendre une interface * et "demander" C++ à quel type d'objet le pointeur pointe. À ma connaissance, cela dépend de méta-informations d'exécution, qui nécessite quelques cycles pour stocker et rechercher de telles informations.

Examinez le mot-clé "typeid". Cela fournit le plus de magie.

dynamic_cast ne utilise RTTI, typeid avec std :: type_info me semble plus comme la "vraie chose".