¿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
No answers yet.
Inicia sesión para dejar una respuesta
Blogs