Shape.hC++ override metodo non sempre chiamato
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;
};
Utilizzato in questo modo:
std::vector<Graphics::ShapePointPair> theShapes = theSurface.getList();
for(int i = 0; i < theShapes.size(); i++) {
theShapes[i].shape.Render(theShapes[i].location);
}
Questo codice finisce per chiamare Shape :: Render e non Rect :: Render
Presumo che questo sia perché sta lanciando Rect a Shape, ma non ho idea di come smettere di farlo. Sto provando a lasciare che ogni forma controlli come viene eseguita sovrascrivendo il metodo Render.
Qualche idea su come ottenere questo risultato?
Forse si vuole mostrarci il codice che crea gli elementi vettoriali? –
Il problema e la soluzione sono quasi identici a questa http://stackoverflow.com/questions/1230006/ question. Come là, hai un vettore di (struct containting a) una classe base concreta, che devi creare mediante * slicing * classi derivate se ti aspetti che Rect :: Render sia chiamato. –