2014-05-05 3 views
2

dire que j'ai les types de classes suivantesutilisant static_cast - coulée en descente des pointeurs et des objets

class base 
{ 

}; 

class der : public base 
{ 
}; 

Avec static_cast vous pouvez utiliser des objets et des pointeurs.

J'ai essayé les éléments suivants - qui fonctionne (pointeurs)

base* b = new base(); 
der * m = static_cast<der*>(b); 

Cependant ce qui suit ne fonctionne pas

base b; 
der m = static_cast<der>(b); 

Toute suggestion pourquoi la seconde ne fonctionne pas? La fonte statique ne gère-t-elle pas les pointeurs et les objets? Cela fonctionne avec des pointeurs mais cela ne fonctionne pas avec l'objet?

+0

Il n'y a pas de conversion entre base et der (pas de constructeur pour der base, ni d'opérateur de conversion pour der dans base). Il existe une conversion entre deux pointeurs associés. – Suma

+0

Comment existe-t-il une conversion entre deux pointeurs associés? – Rajeshwar

Répondre

8

Dans le premier, vous dites "J'ai un pointeur, et je promets qu'il pointe vers un der, alors s'il vous plaît, allez-y".

Dans le second, vous pouvez faire une telle promesse, parce que vous avez sans ambiguïté un base, pas der.


1. Bien sûr, car il ne fait point de à der, vous obtiendrez un comportement non défini lors de l'exécution.

+2

Vous avez déclaré que «Dans le premier, vous dites" J'ai un pointeur, et je promets qu'il pointe vers un der, alors s'il vous plaît, allez-y ".1 Quelle partie de la déclaration' der * m = static_cast (b); 'déclare cela? comme 'b' est de type' base', comment dites-vous son type 'der'? – Rajeshwar

+1

@Oli Pourriez-vous expliquer pourquoi cela fonctionne avec le pointeur? Comme je comprends l'expression 'dynamic_cast (candidat)'. Le candidat est de type 'base' et pas der – MistyD

+2

@Rajeshwar Concentrez-vous sur le côté droit de la tâche. 'static_cast (b)' dit "Hey compilateur, vous ne savez pas si' b' est un pointeur sur un 'der' (c'est peut-être un pointeur vers une autre classe enfant de' base'), mais je vous assure c'est.". – Lilshieste

Questions connexes