我不明白這是什麼。C++覆蓋方法
我有了實體的載體,並允許您從場景中添加並獲得實體場景類:
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()方法應該重寫它從Entity類繼承的draw()方法。
但它沒有。如果使用下面的代碼:
scene->getEntity(0).draw();
,其中實體0是一個多邊形(或至少應該是),它打印「否」從父方法(就像它不是一個多邊形,只是一個實體)。事實上,它似乎並沒有讓我打電話到多邊形獨特的方法沒有得到:
「一些方法名」:是不是「實體」
所以任何想法是怎麼回事的一員?
感謝您的幫助。
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業務。
嘗試存儲指向實體的指針,而不是您的Scene類中實體對象的副本。 – chollida 2009-08-04 21:27:58