Shape.hसी ++ अधिरोहित विधि
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 :: रेंडर
मुझे लगता है कि यह है क्योंकि यह एक आकार में रेक्ट कास्टिंग कर रहा है, लेकिन मुझे यह नहीं पता कि इसे करने से इसे कैसे रोकें। मैं प्रत्येक आकार को नियंत्रित करने की कोशिश कर रहा हूं कि इसे रेंडर विधि को ओवरराइड करके कैसे प्रदान किया जाता है।
इसे प्राप्त करने के तरीके पर कोई विचार?
शायद तुम हमें कोड कि वेक्टर तत्वों को दिखाने के लिए करना चाहते हैं? –
समस्या और समाधान लगभग इस http://stackoverflow.com/questions/1230006/ प्रश्न के समान हैं। वैसे, आपके पास कंक्रीट बेस क्लास का एक वेक्टर है (कंक्रीट बेस क्लास, जिसे आप * स्लाइसिंग * व्युत्पन्न कक्षाओं द्वारा बनाते हैं यदि आप Rect :: रेंडर कहने की अपेक्षा करते हैं। –