C++ में ऑब्जेक्ट स्लाइसिंग (object slicing) क्या है और इससे कैसे बचें?
नमस्ते! मैंने हाल ही में C++ सीखना शुरू किया है और मुझे एक समस्या का सामना करना पड़ा जिसे मैं समझ नहीं पा रहा हूँ। मेरे पास एक बेस क्लास `Animal` और एक डिराइव्ड क्लास `Dog` है, जो `breed` फील्ड जोड़ता है। मैंने एक फंक्शन लिखा है जो `Animal` को वैल्यू (by value) से लेता है। जब मैं इसमें `Dog` ऑब्जेक्ट पास करता हूँ, तो कंपाइलर कोई एरर नहीं देता, लेकिन फंक्शन के अंदर मैं नस्ल (breed) का डेटा खो देता हूँ। यहाँ मेरा कोड है:
```cpp
#include
#include
class Animal {
public:
Animal(const std::string& name) : name_(name) {}
virtual void speak() const { std::cout << "Animal sound\n"; }
std::string getName() const { return name_; }
private:
std::string name_;
};
class Dog : public Animal {
public:
Dog(const std::string& name, const std::string& breed)
: Animal(name), breed_(breed) {}
void speak() const override { std::cout << "Woof!\n"; }
std::string getBreed() const { return breed_; }
private:
std::string breed_;
};
void printAnimal(Animal a) { // यहाँ