मैं सी ++ सीख रहा हूं और वर्चुअल कीवर्ड के बारे में सीख रहा हूं। मैंने इसका लाभ उठाने के लिए इंटरनेट को समझने की कोशिश की है। मैं अपने संपादक में गया और निम्नलिखित प्रयोग किया, यह मूल संदेश को दो बार प्रिंट करने की उम्मीद कर रहा था (क्योंकि मैं इस धारणा के तहत था कि कार्यों को ओवरराइड करने के लिए वर्चुअल कीवर्ड की आवश्यकता है)। हालांकि, यह दो अलग-अलग संदेशों को मुद्रित करता है। क्या कोई मुझे समझा सकता है कि हमें वर्चुअल कीवर्ड की आवश्यकता क्यों है यदि हम केवल कार्यों को ओवरराइड कर सकते हैं और फिर भी प्रतीत होता है कि पॉलिमॉर्फिक व्यवहार मिलता है? शायद कोई भविष्य में मुझे और अन्य लोगों की मदद कर सकता है वर्चुअल बनाम ओवरराइडिंग को समझता है। (मुझे जो आउटपुट मिल रहा है वह है "मैं आधार हूं" इसके बाद "मैं व्युत्पन्न हूं")।सी ++ वर्चुअल कीवर्ड बनाम ओवरराइडिंग फ़ंक्शन
#include <iostream>
using namespace std;
class Base{
public:
void printMe(){
cout << "I am the base" << endl;
}
};
class Derived: public Base{
public:
void printMe(){
cout << "I am the derived" << endl;
}
};
int main() {
Base a;
Derived b;
a.printMe();
b.printMe();
return 0;
}
नोट: 'नेमस्पेस std का उपयोग करना;' में शामिल होने की एक बुरी आदत है और यदि आप अभी रोक सकते हैं तो आप भविष्य में पूरे सिरदर्द से बच सकते हैं। 'Std ::' उपसर्ग एक कारण के लिए है: यह आपके स्वयं के वर्गों, संरचनाओं और चर के साथ संघर्ष से बचाता है। – tadman
'बेस * पी = नया व्युत्पन्न; पी-> printMe(); 'वर्चुअल' के साथ और बिना। – HolyBlackCat
स्पष्टीकरण के लिए - एक पॉइंटर या उसके बेस क्लास के संदर्भ के माध्यम से ऑब्जेक्ट तक पहुंचने पर पॉलीमोर्फिक व्यवहार प्राप्त किया जाता है। – DeiDei