Maison > Java > javaDidacticiel > Comment obtenir l'équivalent C de l'opérateur \'instanceof\' de Java ?

Comment obtenir l'équivalent C de l'opérateur \'instanceof\' de Java ?

Linda Hamilton
Libérer: 2024-11-03 21:51:30
original
912 Les gens l'ont consulté

How to Achieve the C   Equivalent of Java's

Comment obtenir l'équivalent C de l'instanceof de Java

En Java, l'opérateur "instanceof" vous permet de déterminer si un objet appartient à un classe ou interface spécifique. En C, il existe plusieurs méthodes pour obtenir cette fonctionnalité.

Diffusion dynamique avec RTTI

Une approche consiste à utiliser la diffusion dynamique avec les informations de type d'exécution (RTTI) activées. Cela nécessite que vous incluiez les en-têtes nécessaires :

<code class="cpp">#include <typeinfo>
#include <cxxabi.h></code>
Copier après la connexion

Et puis vous pouvez effectuer une diffusion dynamique en utilisant :

<code class="cpp">if(NewType* v = dynamic_cast<NewType*>(old)) {
   // old was safely casted to NewType
   v->doSomething();
}</code>
Copier après la connexion

Notez que cette approche nécessite que la prise en charge RTTI soit activée dans votre compilateur .

Fonctions virtuelles

Une autre méthode consiste à utiliser des fonctions virtuelles. Vous pouvez définir une fonction virtuelle dans la classe de base et la remplacer dans les classes dérivées. Ensuite, vous pouvez vérifier le type dynamique d'un objet en appelant sa fonction virtuelle :

<code class="cpp">class Base {
public:
    virtual void doSomething() {}
};

class Derived : public Base {
public:
    void doSomething() override {}
};

...

if(auto* derived = dynamic_cast<Derived*>(old)) {
    derived->doSomething();
}</code>
Copier après la connexion

Type Switch

Enfin, vous pouvez utiliser un commutateur de type pour déterminer le type dynamique d'un objet. Cette approche s'appuie sur la classe type_info :

<code class="cpp">if(old.IsSameAs(typeid(NewType))) {
    // old was safely casted to NewType
    NewType* v = static_cast<NewType*>(old);
    v->doSomething();
}</code>
Copier après la connexion

Considérations

Bien que ces méthodes offrent des fonctionnalités similaires à l'opérateur "instanceof" de Java, il est crucial de se rappeler que le casting dynamique et la vérification de type peut entraîner des pénalités de performances. Il est recommandé d'envisager d'utiliser des approches alternatives telles que des fonctions virtuelles ou des commutateurs de type pour de meilleures performances dans les applications critiques.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal