172 votes

Trouver le type d’un objet en C++

J’ai une classe A et une autre classe qui hérite de celle-ci, B. Je suis la substitution d’une fonction qui accepte un objet de type A comme paramètre, donc je dois accepter une A. Cependant, j’ai plus tard appeler des fonctions que B a, alors je veux retourner false et pas procéder si l’objet passé n’est pas de type b.

Quel est le meilleur moyen de savoir quel type de l’objet passé à ma fonction ?

180voto

yesraaj Points 12759

dynamic_cast devrait faire l'affaire

TYPE& dynamic_cast<TYPE&> (object);
TYPE* dynamic_cast<TYPE*> (object);

L' dynamic_cast mot-clé jette une donnée à partir d'un pointeur ou d'une référence de type à l'autre, l'exécution d'un moment de l'exécution pour s'assurer de la validité de la fonte.

Si vous essayez de jeter de pointeur vers un type qui n'est pas un type de l'objet réel, le résultat de la fonte sera NULLE. Si vous essayez de jeter la référence à un type qui n'est pas un type de l'objet réel, le casting va jeter un bad_cast d'exception.

Assurez-vous qu'il existe au moins une fonction virtuelle dans la classe de Base pour faire dynamic_cast travail.

178voto

Robocide Points 1084

cast dynamique est le meilleur pour votre description du problème, mais juste pour ajouter que vous pouvez connaître la classe du type par :

31voto

Paul Betts Points 41354

C’est ce qu’on appelle RTTI, mais vous voudrez certainement revoir votre conception ici, parce que trouver le type et faire les choses spéciales basées sur elle rend votre code plus fragile.

9voto

freespace Points 9024

Sans doute incorporer dans vos objets un ID « tag » et il permet de distinguer les objets de la classe A et de classe B.

Cependant, cela montre une faille dans la conception. Idéalement ces méthodes en B qui A n’a pas, devrait faire partie de A mais reste vide et B remplace les. Cela supprime le code spécifiques à la classe et est plus dans l’esprit de la POO.

9voto

Joshua Points 13231
Il s'agit d'un rempl...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X