#include <iostream>
using namespace std;
class CPolygon {
protected:
int width, height;
public:
virtual int area()
{ return (0); }
};
class CRectangle: public CPolygon {
public:
int area() { return (width * height); }
};
संकलन चेतावनी हैसी ++ संकलन के दौरान 'वर्चुअल विधि ... लेकिन गैर-वर्चुअल विनाशक' चेतावनी का क्या अर्थ है?
Class '[[email protected]' has virtual method 'area' but non-virtual destructor
कैसे इस चेतावनी को समझने के लिए और कैसे कोड में सुधार करने के?
[संपादित करें] क्या यह संस्करण अभी सही है? (अपने आप अवधारणा के साथ स्पष्ट करना जवाब देने के लिए कोशिश कर रहा है)
#include <iostream>
using namespace std;
class CPolygon {
protected:
int width, height;
public:
virtual ~CPolygon(){};
virtual int area()
{ return (0); }
};
class CRectangle: public CPolygon {
public:
int area() { return (width * height); }
~CRectangle(){}
};
हां, नया संस्करण सही है। हालांकि इसे व्युत्पन्न कक्षाओं में कार्यों को फिर से घोषित करने के लिए अच्छा रूप माना जाता है, भले ही यह आवश्यक नहीं है। ऐसा इसलिए है कि जो लोग व्युत्पन्न कक्षा को देखना चाहते हैं वे अभी भी जानते हैं कि कार्य आभासी हैं। – Omnifarious
आपका मतलब है 'वर्ग सीआरएक्सएंगल: सार्वजनिक CPolygon { सार्वजनिक: आभासी int क्षेत्र() {वापसी (चौड़ाई * ऊंचाई); } }; '? – qazwsx
हां। और 'आभासी ~ CRectangle() {} 'साथ ही। जैसा कि मैंने कहा, यह बताते हुए कि ये फ़ंक्शंस वर्चुअल हैं, यह एक अच्छा तरीका है, किसी भी तरह से भाषा द्वारा इसकी आवश्यकता नहीं है। – Omnifarious