Ich kann nicht herausfinden, was los ist.C++ Overriding Methoden
ich eine Szene Klasse, die einen Vektor von Entitäten hat und ermöglicht es Ihnen, Objekte aus der Szene hinzuzufügen und zu erhalten:
class Scene {
private:
// -- PRIVATE DATA ------
vector<Entity> entityList;
public:
// -- STRUCTORS ---------
Scene();
// -- PUBLIC METHODS ----
void addEntity(Entity); // Add entity to list
Entity getEntity(int); // Get entity from list
int entityCount();
};
Meine Entity-Klasse ist wie folgt (Ausgabe ist zum Testen):
class Entity {
public:
virtual void draw() { cout << "No" << endl; };
};
Und dann habe ich eine Polygon-Klasse, die von Entity erbt:
class Polygon: public Entity
{
private:
// -- PRIVATE DATA ------
vector<Point2D> vertexList; // List of vertices
public:
// -- STRUCTORS ---------
Polygon() {}; // Default constructor
Polygon(vector<Point2D>); // Declare polygon by points
// -- PUBLIC METHODS ----
int vertexCount(); // Return number of vertices
void addVertex(Point2D); // Add vertex
void draw() { cout << "Yes" << endl; }; // Draw polygon
// -- ACCESSORS ---------
Point2D getVertex(int); // Return vertex
};
Wie Sie kann sehen, es hat eine draw() -Methode, die die draw() -Methode überschreiben sollte, die es von der Entity-Klasse erbt.
Aber es tut es nicht. Wenn mit dem folgenden Code:
scene->getEntity(0).draw();
wo Entität 0 ein Polygon (oder zumindest sein soll), druckt er „Nein“ von der übergeordneten Methode (als ob es kein Polygon ist, nur eine Entity). In der Tat scheint es nicht mich eindeutig Polygon alle Methoden zu lassen rufen, ohne sich:
‚einige Methodennamen‘: ist jede Idee kein Mitglied von ‚Entity‘
Also, was ist los?
Danke für die Hilfe.
UPDATE:
Also habe ich den Code in der ersten Antwort gegeben implementiert, aber ich bin nicht sicher, wie mein Polygon zur Liste hinzuzufügen. Etwas wie das?
const tr1::shared_ptr<Entity>& poly = new Polygon;
poly->addVertex(Point2D(100,100));
poly->addVertex(Point2D(100,200));
poly->addVertex(Point2D(200,200));
poly->addVertex(Point2D(200,100));
scene->addEntity(poly);
Ich bin nur nicht zu diesem shared_ptr Geschäft gewöhnt.
versuchen Sie, Zeiger auf Entitäten und nicht auf Kopien von Entitätsobjekten in Ihrer Scene-Klasse zu speichern. – chollida