لماذا نحتاج إلى الدوال الافتراضية في 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() لكل حيوان محدد، لكن