我也弄不清是什么了这一点。
我有一个具有实体的载体,并允许您从场景中添加并获得实体场景类:
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; };
};
然后,我有一个从实体继承的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()方法平局()方法。
但事实并非如此。 当使用如下代码:
scene->getEntity(0).draw();
其中,实体0是一个多边形(或至少应该是),它打印“否”从父方法(就像它不是一个多边形,只是一个实体)。 事实上,它似乎并没有让我叫独特的多边形的方法没有得到:
“ 一些方法名 ”:是不是“实体”的成员
所以任何想法是怎么回事?
谢谢您的帮助。
更新:
所以,我实现了在第一个答案给定的代码,但我不知道如何将我的多边形添加到列表中。 像这样的事情?
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的业务。