ما هي الفئة الأساسية الافتراضية في C++ ولماذا نحتاجها في الوراثة المتعددة؟
مرحباً بالجميع! لقد بدأت مؤخراً في تعلم C++ وواجهت مشكلة عند استخدام الوراثة المتعددة. لدي فئة أساسية `Animal`، والتي ترث منها `Bird` و `Mammal`. ثم أريد إنشاء فئة `Bat`، والتي ترث من كليهما — `Bird` و `Mammal`. لكن المترجم يعطي خطأ في التضارب (ambiguity) عندما أحاول استدعاء الدالة `speak()`، المعرفة في `Animal`. إليك مثال الكود:\n\n```cpp\nclass Animal {\npublic:\n void speak() { cout << "Animal sound"; }\n};\n\nclass Bird : public Animal {};\nclass Mammal : public Animal {};\nclass Bat : public Bird, Mammal {};\n```\n\nعند محاولة إنشاء كائن من `Bat` واستدعاء `bat.speak()`، أحصل على خطأ. لقد سمعت عن `virtual` للفئات الأساسية، لكنني لا أفهم كيف يعمل وما الفرق. اشرحوا لي، من فضلكم، ما هو