나는 이것에 무엇이 있는지 알 수 없다.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 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();
실체 공은 다각형 (또는 이상이어야 함) (그것이 다각형, 단지 법인이 아니다 것처럼), 그것은 "아니오"부모 방법에서 인쇄합니다. 사실, 나를 점점없이 다각형에 고유 한 모든 메소드를 호출 할 수 있도록하지 않는 것 :
'일부 메소드 이름이'무슨 일이야 '법인'
그래서 어떤 생각의 멤버가 아닌?
도움 주셔서 감사합니다.
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 객체 복사본보다는 Entities에 대한 포인터를 저장해보십시오. – chollida