C-Äquivalent zu Javas Instanceof: Dynamic_cast und alternative Ansätze
Mit dem Instanzof-Operator von Java können Sie überprüfen, ob ein Objekt eine Instanz eines bestimmten Objekts ist Klasse oder ihre Unterklassen. In C können Sie mit „dynamic_cast“ eine ähnliche Funktionalität erreichen.
<code class="cpp">if (NewType* v = dynamic_cast<NewType*>(old)) { // Cast succeeded, old is a NewType object v->doSomething(); }</code>
Dieser Ansatz erfordert, dass Laufzeittypinformationen (RTTI) in Ihrem Compiler aktiviert sind. Dynamic_cast kann jedoch mit Leistungseinbußen verbunden sein.
Alternative Ansätze:
<code class="cpp">switch (old->getType()) { case BOX: // old is a Box object break; case SPECIAL_BOX: // old is a SpecialBox object break; }</code>
Dieser Ansatz erfordert kein RTTI, ist aber nicht für die mehrstufige Vererbung geeignet.
Hinweis: Berücksichtigen Sie die Notwendigkeit einer dynamischen Typprüfung, da diese auf Designprobleme hinweisen kann. Alternativen wie virtuelle Funktionen oder der Enum-Ansatz können in vielen Fällen ein besseres Design und eine bessere Leistung bieten.
Das obige ist der detaillierte Inhalt vonWie erreicht man die „instanceof“-Funktionalität von Java in C: „dynamic_cast“ und Alternativen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!