什么是C++中的对象切片(object slicing)以及如何避免它?
你好!我最近开始学习C++,遇到了一个我无法理解的问题。我有一个基类`Animal`和一个派生类`Dog`,它添加了一个字段`breed`。我写了一个按值接受`Animal`的函数。当我将`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) { // 当