नहीं कहा जा रहा है मेरे पास पैनल नामक आधार श्रेणी है, जहां खिड़की के बारे में कुछ जानकारी संग्रहीत की जाती है, फिर मेरे पास सभी नियंत्रणों के लिए उप-वर्ग हैं: बटन, लेबल इत्यादि। बेस क्लास में, मेरे पास virtual void ApplySchemeSettings(Scheme* scheme) { }
विधि है , जिसे Panel(Panel* parent)
कन्स्ट्रक्टर के भीतर बुलाया जाता है। लेकिन उप-वर्ग के बजाय, बेस क्लास से ApplySchemeSettings
(Panel
) कहा जा रहा है।वर्चुअल विधि को
class Panel
{
[...]
public:
virtual void ApplySchemeSettings(Scheme* scheme) { };
Panel(Panel* parent)
{
[...]
this->ApplySchemeSettings(scheme());
};
}
class Frame : public Panel
{
[...]
public:
void ApplySchemeSettings(Scheme* scheme)
{
this->border = scheme->GetBorder("FrameBorder");
}
}
मैं ApplySchemeSettings
के रूप में सार की घोषणा नहीं कर सकते क्योंकि उपवर्गों उपयोगकर्ता द्वारा किया जाता है।
'यह-> ApplySchemeSettings (योजना()); 'कॉल के बिंदु पर' इस 'पॉइंटर का प्रकार' पैनल * const' है, इसलिए यह 'पैनल :: ApplySchemeSettings' को आमंत्रित करता है। कहानी का नैतिक आधार वर्ग के निर्माता से कभी वर्चुअल फ़ंक्शन नहीं कॉल करता है। –
http://stackoverflow.com/questions/6582239/avoiding-virtual-methods-in-constructor –
http://stackoverflow.com/questions/507043/virtual-function-invocation-from-constructor –