Avatar ·

什么是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) { // 当