Avatar ·

O que é object slicing em C++ e como evitá-lo?

Olá! Recentemente comecei a estudar C++ e me deparei com um problema que não consigo entender. Tenho uma classe base `Animal` e uma classe derivada `Dog`, que adiciona um campo `breed`. Escrevi uma função que recebe `Animal` por valor. Quando passo um objeto `Dog` para ela, o compilador não dá erro, mas na função perco os dados sobre a raça (campo `breed`). Aqui está meu 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) { // Ao