C++ में ऑब्जेक्ट स्लाइसिंग (object slicing) क्या है और इससे कैसे बचें?
नमस्ते! मैं C++ सीख रहा हूँ और एक समस्या में फँस गया हूँ जिसे मैं समझ नहीं पा रहा हूँ। मेरे पास एक बेस क्लास `Shape` और एक डिराइव्ड क्लास `Circle` है। जब मैं `Circle` ऑब्जेक्ट को किसी फंक्शन में पास करता हूँ जो `Shape` को वैल्यू (by value) से लेता है, तो मैं `Circle` के विशिष्ट डेटा और व्यवहार को खो देता हूँ। उदाहरण के लिए:
```cpp
#include
#include
class Shape {
public:
virtual void draw() const { std::cout << "Drawing Shape\n"; }
};
class Circle : public Shape {
public:
void draw() const override { std::cout << "Drawing Circle\n"; }
double radius = 5.0;
};
void printShape(Shape s) { // वैल्यू से ले रहे हैं
s.draw();
// std::cout << s.radius; // त्रुटि! Shape में radius नहीं है
}
int main() {
Circle c;
printShape(c); // "Drawing Circle" के बजाय "Drawing Shape" प्रिंट होता है!
return 0;
}
```
मैंने उम्मीद की थी कि `draw()` `Circle` से कॉल होगा, लेकिन `Shape` का वर्जन कॉल हुआ। इसके अलावा, मैं `radius` तक एक्सेस नहीं कर सकता। इंटरनेट पर इसे 'object slicing' कहते हैं। क्या आप समझा सकते हैं कि क्या हो रहा है?