उन्हें वर्चुअल चिह्नित करने की कोई आवश्यकता नहीं है।
मैं यह तर्क दूंगा कि वर्चुअल विज्ञापन उन पाठकों को विज्ञापित करता है जिन्हें आप व्युत्पन्न कक्षाओं को कुछ उपयोगी करने के लिए आभासी ओवरराइड करने की अपेक्षा करते हैं। यदि आप वर्चुअल को कुछ करने के लिए कार्यान्वित कर रहे हैं, तो वर्चुअल विधि के पास आपकी कक्षा की तरह की चीज़ों के साथ कुछ भी नहीं हो सकता है: जिस स्थिति में इसे आभासी चिह्नित करना मूर्खतापूर्ण है। पर विचार करें:
class CommsObject {
virtual OnConnect();
virtual OnRawBytesIn();
};
class XMLStream : public CommsObject {
virtual OnConnect();
OnRawBytesIn();
virtual OnXMLData();
};
कि उदाहरण में, OnConnect दोनों वर्गों में आभासी के रूप में दस्तावेज है क्योंकि यह भावना है कि एक वंशज हमेशा जानना चाहते हो बनाता है। OnRawBytesIn XMLStream से "निर्यात" को समझ में नहीं आता है क्योंकि यह कच्चे बाइट को संभालने के लिए उपयोग करता है, और पार्स किए गए डेटा उत्पन्न करता है - जो इसे OnXMLData() के माध्यम से सूचित करता है।
ऐसा करने के बाद, मैं तर्क दूंगा कि एक्सएमएलस्ट्रीम को देखते हुए तीसरी कक्षा के रखरखाव को लगता है कि यह अपने स्वयं के ऑनरॉइट्स फ़ंक्शन बनाने के लिए "सुरक्षित" होगा और इसे सामान्य ओवरलोडेड के रूप में काम करने की उम्मीद है फ़ंक्शन - यानी बेस क्लास आंतरिक सही एक को कॉल करेगा, और बाहरी एक आंतरिक ऑनरॉइट्स को मुखौटा करेगा।
इसलिए वर्चुअल को छोड़कर कक्षा के उपभोक्ताओं से महत्वपूर्ण जानकारी छिपी है और कोड अप्रत्याशित तरीके से व्यवहार करता है।
तो ive पूर्ण सर्कल चला गया: इसे फ़ंक्शन के इच्छित उद्देश्य के बारे में संकेत के रूप में उपयोग करने का प्रयास न करें - इसे फ़ंक्शन के व्यवहार के बारे में संकेत के रूप में उपयोग करें: मार्क वर्चुअल लगातार वर्चस्ट्रीम प्रोग्रामर को वर्चुअल यह जानने के लिए कम फ़ाइलों को पढ़ें कि ओवरराइड होने पर फ़ंक्शन कैसे व्यवहार करेगा।
स्रोत
2010-10-26 14:26:47
जब तक कि यह लाइब्रेरी के कुछ हिस्से के रूप में उपयोग नहीं किया जा रहा है। –