मैं एक सी ++ प्रश्नोत्तरी के माध्यम से जा रहा हूं। और निम्नलिखित कोड में आया - यह अवैध है, लेकिन मुझे समझ में नहीं आता क्यों। किसी को भी व्याख्या कर सकते हैं क्यों इस लाइन:विरासत - यह अवैध क्यों है?
Box* b1 = s1->duplicate();
संकलक त्रुटि, "आकार * से बॉक्स को परिवर्तित नहीं कर सकते" उत्पन्न करता है? मुझे लगता है कि s1->duplicate()
Box::duplicate()
पर कॉल कर रहा है क्योंकि s1
वास्तव में Box
पर इंगित करता है - लेकिन संकलक त्रुटि से ऐसा लगता है कि यह Shape::duplicate()
पर कॉल कर रहा है।
#include <iostream>
struct Shape
{
virtual Shape* duplicate()
{
return new Shape;
}
virtual ~Shape() {}
};
struct Box : public Shape
{
virtual Box* duplicate()
{
return new Box;
}
};
int main(int argc, char** argv)
{
Shape* s1 = new Box;
Box* b1 = s1->duplicate();
delete s1;
delete b1;
return 0;
}
[टी की वजह से उसकी] (http://stackoverflow.com/questions/4665117/c-virtual-function-return-type)। –