これで何が起きているのか分かりません。C++のオーバーライドメソッド
私はエンティティのベクトルを持っており、あなたがシーンからエンティティを追加して取得することができます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();
};
私のエンティティクラスは(出力がテストのためである)である:
あなたのよう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
};
:
class Entity {
public:
virtual void draw() { cout << "No" << endl; };
};
そして私は、エンティティから継承ポリゴンクラスを持っていますそれがEntityクラスから継承するdraw()メソッドをオーバーライドする必要があるdraw()メソッドがあります。
しかし、そうではありません。次のコードを使用する場合:
scene->getEntity(0).draw();
エンティティ0が多角形である(または少なくともあるべきである)(それはポリゴン、単にエンティティではないかのように)、それが「No」で親メソッドから印刷します。実際には、私が得ることなくポリゴンに固有の任意のメソッドを呼び出すせていないようだ。
「いくつかのメソッド名を」まで何任意のアイデアだから、「エンティティ」
のメンバーではないでしょうか?
ありがとうございました。
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クラスのEntityオブジェクトのコピーではなく、エンティティへのポインタを格納してみます。 – chollida