Avatar ·

为什么C++需要虚函数?请举例说明

你好!我刚开始学习C++,正在尝试理解虚函数。我读了很多文章,但还是不完全明白它们为什么是必需的。 我有一个基类 `Animal` 和派生类 `Dog` 和 `Cat`。我希望每个动物都有自己的声音。没有虚函数时,我这样写: ```cpp class Animal { public: void speak() { cout << "Some animal sound\n"; } }; class Dog : public Animal { public: void speak() { cout << "Woof!\n"; } }; class Cat : public Animal { public: void speak() { cout << "Meow!\n"; } }; ``` 当我直接创建对象时,一切正常: ```cpp Dog dog; Cat cat; dog.speak(); // Woof! cat.speak(); // Meow! ``` 但如果我使用指向基类的指针,则会调用基类的方法,而不是派生类的方法: ```cpp Animal* ptr1 = new Dog(); Animal* ptr2 = new Cat(); ptr1->speak(); // 输出 "Some animal sound",但应该输出 "Woof!" ptr2->speak(); // 输出 "Some animal sound",但应该输出 "Meow!" ```