Avatar ·

لماذا نحتاج إلى الدوال الافتراضية في C++؟ اشرح بمثال

مرحبًا أيها الزملاء! لقد بدأت للتو في تعلم C++ ولا أستطيع فهم معنى الدوال الافتراضية. قرأت العديد من المقالات، لكن ما زالت الأفكار مشوشة في ذهني. على سبيل المثال، لدي كلاس أساسي Animal وكلاسين مشتقين Dog و Cat. أريد أن يكون لكل حيوان صوته الخاص. إليك كيف فعلت ذلك بدون دوال افتراضية: ```cpp #include #include class Animal { public: void speak() { std::cout << "Some generic animal sound\n"; } }; class Dog : public Animal { public: void speak() { std::cout << "Woof!\n"; } }; class Cat : public Animal { public: void speak() { std::cout << "Meow!\n"; } }; int main() { std::vector zoo; zoo.push_back(new Dog()); zoo.push_back(new Cat()); for (auto animal : zoo) { animal->speak(); // دائمًا يطبع "Some generic animal sound" } // تنظيف الذاكرة... return 0; } ``` كنت أتوقع أن يتم استدعاء speak() لكل حيوان محدد، لكن