Heim >Java >javaLernprogramm >Wie erreicht man das C-Äquivalent des Java-Operators „instanceof'?

Wie erreicht man das C-Äquivalent des Java-Operators „instanceof'?

Linda Hamilton
Linda HamiltonOriginal
2024-11-03 21:51:30936Durchsuche

How to Achieve the C   Equivalent of Java's

So erreichen Sie das C-Äquivalent von Javas Instanz von

In Java können Sie mit dem Operator „instanz von“ bestimmen, ob ein Objekt zu a gehört bestimmte Klasse oder Schnittstelle. In C gibt es mehrere Methoden, um diese Funktionalität zu erreichen.

Dynamisches Casting mit RTTI

Ein Ansatz ist die Verwendung von dynamischem Casting mit aktivierter Runtime Type Information (RTTI). Dazu müssen Sie die erforderlichen Header einfügen:

<code class="cpp">#include <typeinfo>
#include <cxxabi.h></code>

Und dann können Sie eine dynamische Umwandlung durchführen mit:

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

Beachten Sie, dass für diesen Ansatz die RTTI-Unterstützung in Ihrem Compiler aktiviert sein muss .

Virtuelle Funktionen

Eine andere Methode ist die Verwendung virtueller Funktionen. Sie können eine virtuelle Funktion in der Basisklasse definieren und diese in abgeleiteten Klassen überschreiben. Anschließend können Sie den dynamischen Typ eines Objekts überprüfen, indem Sie seine virtuelle Funktion aufrufen:

<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>

Typschalter

Schließlich können Sie zur Bestimmung einen Typschalter verwenden der dynamische Typ eines Objekts. Dieser Ansatz basiert auf der Klasse 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>

Überlegungen

Obwohl diese Methoden eine ähnliche Funktionalität wie Javas „instanceof“-Operator bieten, ist es wichtig, sich an die dynamische Umwandlung zu erinnern und die Typprüfung kann zu Leistungseinbußen führen. Es wird empfohlen, die Verwendung alternativer Ansätze wie virtuelle Funktionen oder Typschalter in Betracht zu ziehen, um in kritischen Anwendungen eine bessere Leistung zu erzielen.

Das obige ist der detaillierte Inhalt vonWie erreicht man das C-Äquivalent des Java-Operators „instanceof'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn