Ableitende Klasse herausfinden



  • Hallo.
    Ich wusste nicht so recht, wie ich das nennen soll, deshalb der komische Topictitel.

    Zur Situation:
    Es gibt eine Klasse welche CEntity heißt. Das ist die Basisklasse aller Objekte, Modelle und Spieler. Nun werden die Modellklassen und Spielerklassen davon abgeleitet. Es gibt also z.B.:

    CPlayer : public CEntity;
    CModel : CEntity;
    

    Mit der SDK zum Spiel kann ich auf die öffentliche Funktion GetEntity(int ID) zugreifen, nur sagt mir die Funktion nicht, ob das nun ein Spieler, ein Modell oder ein sonstiges Objekt ist. Kann ich also nun herausfinden, ob das Entity Teil der CPlayer-Klasse ist oder der CModel-Klasse?

    Danke & Gruß


  • Mod

    Verstehe ich das richtig, dass du deine Objekte über eine gemeinsame Liste von Basisklassenzeigern ansprichst, diese aber je nach Typ unterschiedlich behandeln willst? Falls ja: Warum dann eine gemeinsame Liste für die Objekte?



  • dynamic_cast, ist aber nicht toll und uu lahm



  • Und was returnt dynamic_cast wenn es die falsche Instanz ist? Oder gibtds da nen Error? 😕

    Gruß



  • "Topictitel" 👍 🙄 😃



  • theliquidwave schrieb:

    Kann ich also nun herausfinden, ob das Entity Teil der CPlayer-Klasse ist oder der CModel-Klasse?

    Ja. Aber viel wichtiger als das wie ist das warum. Wieso glaubst du, die einzelnen Typen zur Laufzeit abfragen zu müssen? Das weist oft auf einen Designfehler hin und kann durch Polymorphie (virtuelle Funktionen) besser gelöst werden.

    theliquidwave schrieb:

    Und was returnt dynamic_cast wenn es die falsche Instanz ist? Oder gibtds da nen Error? 😕

    Was ist ein Error?

    Wenn du dynamic_cast auf Zeiger anwendest, wird im Falle eines Fehlschlags ein Nullzeiger zurückgegeben. Bei Referenzen wird eine Exception vom Typ std::bad_cast geworfen.


Log in to reply