Avatar ·

ما هو تقطيع الكائنات (object slicing) في C++ وكيفية تجنبه؟

مرحبًا! لقد بدأت مؤخرًا في تعلم لغة 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) { // Pr