मुझे final
फ़ंक्शन के साथ कोई समस्या है। मैं कक्षा में बहुरूपता को "रोकना" चाहता हूं लेकिन मैं अभी भी एक व्युत्पन्न वर्ग में एक ही कार्य उत्पन्न करना चाहता हूं।क्या एक व्युत्पन्न वर्ग होना संभव है जो अंतिम कार्य प्राप्त करता है लेकिन एक ही कार्य बनाता है (ओवरराइड नहीं)?
कुछ इस तरह:
class Base{
protected:
int _x, _y;
public:
Base(int x = 0, int y = 0) : _x(x), _y(y){};
int x() const { return _x; }
int y() const { return _y; }
virtual void print()const{ cout << _x*_y << endl; }
};
class Derived : public Base{
public:
Derived(int x = 0, int y = 0) : Base(x, y){}
void print()const final { cout << _x*_y/2.0 << endl; } // final inheritance
};
class NonFinal : public Derived{
void print()const{ cout << "apparently im not the last..." << endl }
// here i want a new function. not overriding the final function from Derived class
};
एक सामान्य नियम के रूप में, मैं कोड छुपाता है कि (एक विरासत आभासी समारोह अधिभावी के स्पष्ट अपवाद के साथ) विरासत में मिला सदस्यों पर एक डिजाइन बग कहेंगे। मैं 'NonFinal' में विधि को कुछ और कॉल करने का सुझाव दूंगा। यदि आपको खुद को ऐसा करने की आवश्यकता है, तो आपके ओओ डिज़ाइन के बारे में कुछ बुरा है। – cdhowie