我不明白这是怎么回事。
我有一个场景类,它具有实体向量,并允许您从场景中添加和获取实体:
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();
};
我的实体类如下(输出用于测试):
class Entity {
public:
virtual void draw() { cout << "No" << endl; };
};
然后我有一个继承自 Entity 的 Polygon 类:
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
};
正如您所看到的,它有一个draw()方法,该方法应该覆盖它从Entity类继承的draw()方法。
但事实并非如此。当使用以下代码时:
scene->getEntity(0).draw();
其中实体 0 是一个多边形(或者至少应该是),它从父方法打印“否”(就好像它不是一个多边形,只是一个实体)。事实上,它似乎不允许我调用 Polygon 特有的任何方法而不会得到:
'一些方法名称' : 不是“实体”的成员
那么知道怎么回事吗?
谢谢您的帮助。
UPDATE:
所以我已经实现了第一个答案中给出的代码,但我不确定如何将我的多边形添加到列表中。像这样的东西吗?
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);
我只是不习惯这种shared_ptr业务。