Shape.hC++重寫方法沒有得到所謂的
namespace Graphics {
class Shape {
public:
virtual void Render(Point point) {};
};
}
Rect.h
namespace Graphics {
class Rect : public Shape {
public:
Rect(float x, float y);
Rect();
void setSize(float x, float y);
virtual void Render(Point point);
private:
float sizeX;
float sizeY;
};
}
struct ShapePointPair {
Shape shape;
Point location;
};
像這樣來使用:
std::vector<Graphics::ShapePointPair> theShapes = theSurface.getList();
for(int i = 0; i < theShapes.size(); i++) {
theShapes[i].shape.Render(theShapes[i].location);
}
該代碼最終調用形狀::渲染和不是矩形::渲染
我假設這是因爲它將Rect塑造成Shape,但我不知道如何阻止它這樣做。我試圖讓每個形狀通過重寫Render方法來控制它的渲染方式。
有關如何實現此目的的任何想法?
也許你想向我們展示的是創建矢量元素的代碼? – 2009-09-18 11:45:56
問題和解決方案几乎與此問題相同http://stackoverflow.com/questions/1230006/問題。在那裏,你有一個(struct包含一個)具體基類的向量,如果你期望Rect :: Render被調用,那麼你必須通過* slicing *派生類來創建它。 – 2009-09-18 11:53:27