Avatar ·

¿Qué es el object slicing en C++ y cómo evitarlo?

¡Hola! Recientemente empecé a estudiar C++ y me encontré con un problema que no puedo entender. Tengo una clase base `Animal` y una clase derivada `Dog`, que agrega un campo `breed`. Escribí una función que toma `Animal` por valor. Cuando le paso un objeto `Dog`, el compilador no da error, pero en la función pierdo los datos sobre la raza (campo `breed`). Aquí está mi código: ```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) { // Al