Casting Abgeleitete Klasse zu Basisklasse

Ich habe ein kniffliges kleines problem ich habe über den Weg laufen. Ich glaube das problem hat zu tun mit der Art, wie ich bin casting-Sachen.

Also ich habe eine Basis-Klasse aufgerufen combatEntity. Es hat die folgende Funktion

class combatEntity {
public:
    virtual void update();
};

Habe ich dann einen Klasse mob, die abgeleitet ist von combatEntity, überschreibt die update-Funktion:

class mob : public combatEntity {
public:
    virtual void update();

}

Dann habe ich eine Klasse namens monster, die abgeleitet ist von mob und überschreibt auch die update-Funktion.

class monster: public mob {
public:
    virtual void update();
}

Ich habe eine combatEntity Zeiger genannt i:

combatEntity* i;

Dann habe ich:

//returns a mob* pointer (needs explicit cast)
monster* newMonster = getMob();
i = newMonster;

Den getMob() Funktion:

mob* getMob() {
   mob* newMob = new mob();
   //set some data in newMob
   return newMob;
}

Wenn ich rufe i->update() ruft es mob::update(), weil newMonster auf "neuen mob();", da getMob() gibt einen neuen mob Zeiger. Wenn ich Anrufe i->update() brauche ich es nennen monster::update(), aber mit Haltepunkte, ich sehe es ruft mob::update() und nicht monster::update().

so, ich brauche zum erstellen einer neuen monster - Objekt, aber noch ist es Basisklasse Daten gefüllt, die mit dem Objekt zurückgegeben, von getMob() haben, aber die Funktionen überschrieben, richtig. Ich habe auch versucht, dynamic_cast, static_cast und reinterpret_cast, und keiner scheint zu arbeiten. Oder muss ich den cast von meiner Basisklasse in eine abgeleitete Klasse, während korrekt überschreiben von Funktionen der abgeleiteten Klasse.

Ich hoffe, dies macht Sinn. Jede Beratung wäre geschätzt.

  • monster ist ein mob, nicht die andere Weise herum. Ich sehe nicht, wie die Besetzung monster* newMonster = getMob(); ist implizit...
  • sorry, ich meinte es Bedarf einer expliziten cast. Fixe Frage.
  • Könnten Sie fügen Sie ein wenig mehr code? Zu wissen, wie getMob() arbeitet, würde hilfreich sein.
  • Sie haben die Beziehung combatEntity <-- mob <-- monster. Wie machst du das monster* newMonster = getMob();?
  • Ich bin verwirrt. Ihre Einrichtung nicht sinnvoll erscheinen. wenn Sie sagen new mob Sie nicht über eine monster! Sie sollten sehr ernsthaft befolgen Sie die Ratschläge, um nicht-Blatt-abstrakte Klassen, und alle Ihre Probleme verschwinden.
  • Wenn Ihr getMob() hat eine return new mob; Sie sollten Sie nicht static_cast es zu einem monster. Die letztere möglicherweise nicht initialisierte Variablen und einen völlig anderen v-Tabelle. Sie können sicher mit einem dynamic_cast. Dies scheitert in Ihrem Fall, die gut, weil Sie nicht über eine monster.
  • getMob() im Grunde nur die Renditen neuen mob();
  • Die Linie i = monster; macht keinen Sinn! monster ist ein Typ. Meinst du monster * i = getMob();? Bitte editieren, wenn das der Fall ist.
  • Ich denke, er macht einen i = newMonster;
  • sorry, meinte ich = newMonster; fest-Frage
  • Ich hasse diese sinnlos lokalen Variablen mit einer Rache...

InformationsquelleAutor Brad | 2012-09-05
Schreibe einen Kommentar