Heim >Backend-Entwicklung >C++ >Wie kann ich den Typ eines Objekts zur Laufzeit in C bestimmen?

Wie kann ich den Typ eines Objekts zur Laufzeit in C bestimmen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-13 19:50:16354Durchsuche

How Can I Determine an Object's Type at Runtime in C  ?

Den Typ eines Objekts in C finden

Der Typ eines Objekts kann mit „dynamic_cast“ bestimmt werden. Diese Methode wandelt ein Datum dynamisch von einem Zeiger- oder Referenztyp in einen anderen um und überprüft die Gültigkeit der Umwandlung zur Laufzeit.

Verwendung:

So wandeln Sie es in einen Zeigertyp um:

TYPE* dynamic_cast<TYPE*>(object);

Zum Umwandeln in eine Referenz Typ:

TYPE& dynamic_cast<TYPE&>(object);

Ergebnis:

  • Wenn die Umwandlung erfolgreich ist und das Objekt vom gewünschten Typ ist, ist das Ergebnis der Zeiger oder Verweis auf das Objekt.
  • Wenn die Umwandlung nicht erfolgreich ist (das Objekt ist nicht vom gewünschten Typ), ist das Ergebnis NULL für eine Zeigerumwandlung und wirft einen bad_cast Ausnahme für einen Referenzcast.

Runtime Type Information (RTTI)

Dynamic_cast basiert auf RTTI, das nur für verfügbar ist polymorphe Klassen (d. h. solche mit mindestens einer virtuellen Methode). In der Praxis stellt dies keine wesentliche Einschränkung dar, da die meisten Basisklassen über einen virtuellen Destruktor zur ordnungsgemäßen Bereinigung in abgeleiteten Klassen verfügen.

Beispiel:

Hier ist ein Beispiel für die Verwendung Dynamic_cast, um zu prüfen, ob ein Objekt vom Typ B ist:

class A {};
class B : public A {
public:
    void b_function() {}
};

void func(A& obj) {
    B* b_ptr = dynamic_cast<B*>(&obj);
    if (b_ptr != nullptr) {
        b_ptr->b_function(); // Object is of type B
    } else {
        std::cout << "Object is not of type B" << std::endl;
    }
}

Das obige ist der detaillierte Inhalt vonWie kann ich den Typ eines Objekts zur Laufzeit in C bestimmen?. 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