ما هي الفئة الأساسية الافتراضية في C++ ولماذا هي مطلوبة في الوراثة المتعددة؟
مرحباً بالجميع! لقد بدأت مؤخراً في تعلم C++ وواجهت مشكلة عند استخدام الوراثة المتعددة. لدي فئة أساسية `Animal`، والتي ترث منها `Bird` و `Mammal`. ثم أريد إنشاء فئة `Bat`، التي ترث من كليهما — `Bird` و `Mammal`. لكن المترجم يعطي خطأ في الغموض عندما أحاول استدعاء method `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عند محاولة إنشاء object من `Bat` واستدعاء `bat.speak()` أحصل على خطأ. لقد سمعت عن `virtual` للفئات الأساسية، لكنني لا أفهم كيف يعمل وما الفرق. اشرحوا لي، من فضلكم، ما هو