.| Autor | Beitrag |
|---|---|
|
000 10.12.2001, 00:10 Nicemice Moderator |
Also ich hab einen Pointer auf ein Objekt vom Typ CBaseEntity. Davon gibts eine abgeleitete Klasse Namens CBasePlayer. www.d3opencoop.com - A Doom3 Cooperative Mod |
|
Profil || Suche |
|
001 10.12.2001, 00:43 Tron |
1. lies mal was ueber RTTI nach aber das sollte nicht noetig sein, wenn das sauberes oo ist und das interface in der basisklasse festgelegt ist und alle entsprechenden methoden schoen brav virtuell sind 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
002 10.12.2001, 01:08 Kriz |
Das ist pure Objektorientierung. Genau dein Thema habe ich aber bereits hier schon fett ausgezwiebelt (Forumsuche). Zu deinem Problem aber trotzdem: CBasePlayer besitzt als Subobjekt stets CBaseEntity. Das bedeutet, daß man bei einem CBasePlayer-Objekt auf die Eigenschaften von CBasePlayer zugreifen kann als auch auf die darunterliegende Ebene von CBaseEntity. Gerade der Ansatz mit Zeigern ist lobenswert, wenn auch hinterhältig. Prüfung auf Klassenzugehörigkeit Leider ist C++ da nicht so elegant wie Java, wo man mittels dem instanceof Operator sowas testen kann. In C++ kann man sowas prüfen, indem man einen umständlichen Vergleich anstellt: Konvertieren von Abgeleitet auf Basis Das geht nur, wenn man einen Zeiger auf die Basisklasse hat und das abgeleitete Objekt darauf umwandelt. Man kann nicht einen abgeleiteten Zeiger nehmen und diesen sich selbst auf Basis casten lassen: Ob das dann alles in allem auch den gewünschten Effekt hat, den man sich erhofft, bleibt wegen des Verlustes der Eigenschaften von CBasePlayer wohl aus... --K:R-I)Z++ Dieser Beitrag wurde am 10.12.2001 um 01:37 von Kriz bearbeitet. |
|
Profil || Suche |
|
003 10.12.2001, 07:12 Tron |
@Kriz: also: ich dachte static_cast waere dafuer gedacht:
oder bin ich da jetzt auf dem holzweg? <edit>
nur wenn man referencen ungueltig castet wird eine exception geworfen, oder? --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett Dieser Beitrag wurde am 10.12.2001 um 07:19 von Tron bearbeitet. |
|
Profil || Suche |
|
004 10.12.2001, 11:10 Kriz |
Hab ich irgendwo gesagt, daß die Umwandlung mit static_cast nicht geht? Nur reinterpret_cast haut richtig rein, auch in den Fällen, wo static_cast möglicherweise versagt. Das mit dynamic_cast ist so: ziel = dynamic_cast<T>(Quelle); Falls Quelle ein Zeiger ist, der nicht auf ein Objekt vom Typ T oder auf ein abgeleitetes Objekt von T zeigt, wird der NULL-Zeiger zurückgegeben. Falls Quelle eine Referenz ist, die nicht auf ein Objekt vom Typ T oder auf ein abgeleitetes Objekt von T zeigt, wird bad_cast geworfen. --K:R-I)Z++ |
|
Profil || Suche |
|
005 10.12.2001, 16:07 Another1 |
nunja, wollen wir mal zur praxis übergehen: 1. Allgemeingültige Prüfung if(FStrEq(STRING(pEntityPtr->pev->classname),"mein_besonderes_entity")) 2. Für Player Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
006 11.12.2001, 17:56 Prefect |
C++ hat halt wenigstens noch ein kleines Bißchen (naja, ne ganze Menge ;)) der Schönheit von C. Wer RTTI in einer _wirklich_ flexiblen, kompilierten General Purpose-Sprache haben will hat eigentlich irgendwas falsch verstanden. Zum Glück kann man RTTI auch deaktivieren. Und wenn du's tatsächlich brauchst kannst du RTTI auch selber programmieren -> siehe Qt. Ich hab jetzt keine Lust, meine Meinungen weiter zu begründen. Erstens bin ich dazu zu müde, zweitens haben wir das eh schon viel zu oft durchgekaut. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
007 11.12.2001, 18:43 Nicemice Moderator |
... und mir reicht another1's methode. --www.d3opencoop.com - A Doom3 Cooperative Mod |
|
Profil || Suche |
|
008 12.12.2001, 14:35 TheVoice |
Schöner Thread! Ich glaube dieses Problem werde ich auch in meinem Tutorial zur OOP behandeln :) --Against TCPA | Resourcecode.de | Blender 3D | [ Darkzone | Pandorra | Alpine ] |
|
Profil || Suche |

