„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie erreicht man das C++-Äquivalent des Java-Operators „instanceof“?

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

Veröffentlicht am 17.11.2024
Durchsuche:932

How to Achieve the C   Equivalent of Java\'s \

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

In Java können Sie mit dem Operator „instanceof“ 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:

#include 
#include 

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

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

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:

class Base {
public:
    virtual void doSomething() {}
};

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

...

if(auto* derived = dynamic_cast(old)) {
    derived->doSomething();
}

Typschalter

Schließlich können Sie einen Typschalter verwenden, um den dynamischen Typ eines Objekts zu bestimmen. Dieser Ansatz basiert auf der Klasse type_info:

if(old.IsSameAs(typeid(NewType))) {
    // old was safely casted to NewType
    NewType* v = static_cast(old);
    v->doSomething();
}

Überlegungen

Obwohl diese Methoden eine ähnliche Funktionalität wie Javas „instanceof“-Operator bieten, ist es wichtig zu bedenken, dass dynamisches Casting und Typprüfung zu Leistungseinbußen führen können. 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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3