I eine Art Hierarchie haben:Anrufverfahren für Objekte von abgeleiteten Typ
class GameObject{...};
class Subject:public GameObject{...};
class Player:public Subject{...};
class Bullet:public Subject{...};
class Enemy:public Subject{...};
in der Anordnung von Gameobject * durchqueren, überprüfe ich den Zustand und die Call-Methode foo (* object1, * object2) (object1 Referenz to Bullet, object2 ist ein Verweis auf Player).
std::vector<GameObject*> objects;
// fill array (pointers to Bullet, Enemy, Player)
foreach(auto obj1 : objects)
{
foreach(auto obj2 : objects)
{
if(obj1.getID() != obj2.getID()
{
foo(*obj1, *obj2);
}
}
}
Auch schreibe ich einige überladene foo Methoden:
void foo(GameObject&, GameObject&)
void foo(Bullet&, Player&)
void foo(Bullet&, Enemy&)
Aber nur foo (Gameobject &, Gameobject &) genannt wird. Warum?
Weil die Zeiger immer noch vom Typ 'GameObject' sind. So funktioniert Polymorphismus nicht. – AndyG
Wenn Sie das Objekt als abgeleiteten Typ interpretieren möchten, müssen Sie den Basisklassenzeiger auf einen Zeiger der abgeleiteten Klasse hin "dynamic_cast". (Aber natürlich müssen Sie wissen, welcher abgeleitete Typ verwendet wird, wenn jedes Objekt geworfen wird, was den Zweck des Polymorphismus besiegt.) – 0x5453