C++ में वर्चुअल फंक्शन क्यों ज़रूरी हैं? उदाहरण के साथ समझाएं
नमस्ते! मैंने अभी C++ सीखना शुरू किया है और वर्चुअल फंक्शन को समझने की कोशिश कर रहा हूँ। मैंने कई लेख पढ़े, लेकिन फिर भी पूरी तरह से नहीं समझ पाया कि ये क्यों ज़रूरी हैं।
मेरे पास एक बेस क्लास `Animal` और डिराइव्ड क्लासेज़ `Dog` और `Cat` हैं। मैं चाहता हूँ कि हर जानवर की अपनी आवाज़ हो। वर्चुअल फंक्शन के बिना मैंने ऐसे लिखा:
```cpp
class Animal {
public:
void speak() { cout << "Some animal sound\n"; }
};
class Dog : public Animal {
public:
void speak() { cout << "Woof!\n"; }
};
class Cat : public Animal {
public:
void speak() { cout << "Meow!\n"; }
};
```
जब मैं सीधे ऑब्जेक्ट बनाता हूँ, तो सब काम करता है:
```cpp
Dog dog;
Cat cat;
dog.speak(); // Woof!
cat.speak(); // Meow!
```
लेकिन अगर मैं बेस क्लास का पॉइंटर इस्तेमाल करूँ, तो बेस क्लास का मेथड कॉल होता है, डिराइव्ड क्लास का नहीं:
```cpp
Animal* ptr1 = new Dog();
Animal* ptr2 = new Cat();
ptr1->speak(); // "Some animal sound" प्रिंट करता है, जबकि "Woof!" होना चाहिए
ptr2->speak(); // "Some animal sound" प्रिंट करता है, जबकि "Meow!" होना चाहिए
```