Réalisation de la fonctionnalité "instanceof" en C
L'opérateur "instanceof" en Java permet aux développeurs de vérifier si un objet appartient à une classe spécifique ou une interface. C n'a pas d'équivalent exact, mais il existe des méthodes pour obtenir des fonctionnalités similaires.
Diffusion dynamique avec prise en charge RTTI
L'approche privilégiée implique une diffusion dynamique utilisant les informations de type d'exécution (RTTI ):
<code class="cpp">if (NewType* v = dynamic_cast<NewType*>(old)) { // old was safely casted to NewType v->doSomething(); }</code>
Notez que cette méthode nécessite la prise en charge RTTI dans le compilateur.
Utilisation d'une méthode getType()
Une approche alternative, qui ne nécessite pas RTTI, consiste à définir une méthode getType() dans la classe de base :
<code class="cpp">if (old->getType() == BOX) { Box* box = static_cast<Box*>(old); // Do something box specific }</code>
Cependant, cette approche présente des limites dans la gestion de plusieurs niveaux d'héritage.
Considérations
Il est important de s'interroger sur la nécessité du casting dynamique avant de l'utiliser. Une mauvaise conception peut conduire à une utilisation excessive. Pensez à utiliser des fonctions ou des visiteurs virtuels pour des approches plus orientées objet.
De plus, l'approche de la méthode getType() présente un inconvénient en termes de performances par rapport au casting dynamique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!