चलिए इस परिदृश्य को Visual C ++ 2010 में मानते हैं:
#include <iostream>
#include <conio.h>
using namespace std;
class Base
{
public:
int b;
void Display()
{
cout<<"Base: Non-virtual display."<<endl;
};
virtual void vDisplay()
{
cout<<"Base: Virtual display."<<endl;
};
};
class Derived : public Base
{
public:
int d;
void Display()
{
cout<<"Derived: Non-virtual display."<<endl;
};
virtual void vDisplay()
{
cout<<"Derived: Virtual display."<<endl;
};
};
int main()
{
Base ba;
Derived de;
ba.Display();
ba.vDisplay();
de.Display();
de.vDisplay();
_getch();
return 0;
};
सैद्धांतिक रूप से, इस छोटे अनुप्रयोग का आउटपुट होना चाहिए:
- आधार: गैर-आभासी प्रदर्शन।
- आधार: आभासी प्रदर्शन।
- आधार: गैर-आभासी प्रदर्शन।
- व्युत्पन्न: आभासी प्रदर्शन।
क्योंकि बेस क्लास का डिस्प्ले मेथड एक वर्चुअल मेथड नहीं है, इसलिए डेरेव्ड क्लास इसे ओवरराइड करने में सक्षम नहीं होना चाहिए। सही?
समस्या यह है कि जब मैं एप्लिकेशन चलाता हूं, तो यह प्रिंट करता है:
- आधार: गैर-आभासी प्रदर्शन।
- आधार: आभासी प्रदर्शन।
- व्युत्पन्न: गैर-आभासी प्रदर्शन।
- व्युत्पन्न: आभासी प्रदर्शन।
इसलिए या तो मुझे वर्चुअल तरीकों की अवधारणा समझ में नहीं आई या विजुअल C ++ में कुछ अजीब हुआ।
क्या कोई मुझे स्पष्टीकरण देने में मदद कर सकता है?
de.Base::Display()
।