2009-11-23 12 views
0

peut-on dire exactement ce que les moyens de coulée dynamique en C++. où exactement pouvons-nous utiliser ce casting dynamique? cela m'a été demandé dans l'interview et je suis allé vide pour cette question :).ce qui est exactement coulée dynamique en C++

+0

dup http://stackoverflow.com/questions/28002/regular-cast-vs-staticcast-vs-dynamiccast – Macke

Répondre

2

Essayez d'utiliser la recherche première old answer

+1

Bon pointeur, bien que sauter la réponse acceptée et plonger directement dans le second (par litb) qui est juste ... Contrairement à la première:/ –

+0

@Mathieu: le temps fixé, litb 'réponse est maintenant en premier. Merci pour l'indice quand même. – philant

0

Dynamic casting est de découvrir en toute sécurité le type d'une instance d'objet à l'exécution.

Ceci est réalisé par le compilateur générant des tables de référence, qui peuvent être potentiellement assez grandes. Pour cette raison, il est souvent désactivé pendant la compilation si le programmeur sait qu'il n'utilise pas la fonction.

7

dynamic_cast est coulée méthode pour découvrir la classe lors de l'exécution de l'objet.

class Base 
{ 
    public: 
    virtual bool func1(); 
}; 


class Derived1 : Base 
{ 
    public: 
    virtual bool func1(); 

    virtual bool funcDer1(); 
}; 



class Derived2 : Base 
{ 
    public: 
    virtual bool func1(); 
    virtual bool funcDer2(); 
}; 

Base* pDer1 = new Derived1; 
Base* pDer2 = new Derived2; 


Derived2* pDerCasted = dynamic_cast<Derived2*>(pDer2); 
if(pDerCasted) 
{ 
    pDerCasted->funcDer2(); 
} 


-> We cannot call funcDer2 with pDer2 as it points to Base class 
-> dynamic_cast converts the object to Derived2 footprint 
-> in case it fails to do so, it returns NULL .(throws bad_cast in case of reference) 

Remarque: Habituellement, Dynamic_cast doit être évité avec une conception OO soignée.

+0

Je suppose que vous vouliez dire Derived2 * pDerCasted ..? – lorenzog

+0

oui, Derived2. J ai mis a jour. –