【发布时间】:2010-11-16 19:57:18
【问题描述】:
我不知道这是怎么回事。
我有一个 Scene 类,它有一个实体向量,允许您从场景中添加和获取实体:
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();
};
我的Entity类如下(输出用于测试):
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 独有的方法而不获取:
'一些方法名':不是'Entity'的成员
所以知道发生了什么吗?
感谢您的帮助。
更新:
所以我已经实现了第一个答案中给出的代码,但我不确定如何将我的多边形添加到列表中。像这样?
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 业务。
【问题讨论】:
-
尝试在场景类中存储指向实体的指针而不是实体对象的副本。
标签: c++ class inheritance methods overriding