मैं यह नहीं समझ सकता कि इसके साथ क्या हो रहा है।सी ++ ओवरराइडिंग विधियां
मैं एक दृश्य वर्ग संस्थाओं का एक वेक्टर है और आप दृश्य से जोड़ सकते हैं और प्राप्त करने के लिए संस्थाओं की अनुमति देता है कि है:
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; };
};
और फिर मैं एक बहुभुज वर्ग इकाई से विरासत है देख सकते हैं, इसमें एक ड्रॉ() विधि है जो कि एंटिटी क्लास से प्राप्त ड्रा() विधि को ओवरराइड करनी चाहिए।
लेकिन ऐसा नहीं है। निम्नलिखित कोड का उपयोग करते समय:
scene->getEntity(0).draw();
जहां इकाई 0 एक बहुभुज है (या कम से कम होना चाहिए), यह "नहीं" माता-पिता विधि से प्रिंट (जैसे कि यह एक बहुभुज, बस एक इकाई नहीं है)। वास्तव में, यह मुझे प्राप्त किए बिना बहुभुज के लिए अद्वितीय किसी भी तरीकों कॉल नहीं लगती:
'कुछ विधि नाम': 'इकाई'
इसलिए किसी भी क्या हो रहा है विचार का सदस्य नहीं है?
सहायता के लिए धन्यवाद।
अद्यतन:
तो मैं पहले उत्तर में दिए गए कोड को क्रियान्वित किया है, लेकिन मैं सूची में मेरी बहुभुज जोड़ने के बारे में यकीन नहीं है। कुछ इस तरह?
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);
मुझे अभी इस साझा_प्टर व्यवसाय में उपयोग नहीं किया जा रहा है।
अपनी दृश्य कक्षा में इकाई वस्तुओं की प्रतियों की बजाय इकाइयों को पॉइंटर्स संग्रहीत करने का प्रयास करें। – chollida