Avatar ·

Warum braucht man virtuelle Funktionen in C++? Erklären Sie anhand eines Beispiels

Hallo! Ich habe gerade angefangen, C++ zu lernen, und versuche, virtuelle Funktionen zu verstehen. Ich habe viele Artikel gelesen, aber ich verstehe immer noch nicht ganz, wofür sie gut sind. Ich habe eine Basisklasse `Animal` und abgeleitete Klassen `Dog` und `Cat`. Ich möchte, dass jedes Tier seinen eigenen Laut hat. Ohne virtuelle Funktionen habe ich das so geschrieben: ```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"; } }; ``` Wenn ich Objekte direkt erstelle, funktioniert alles: ```cpp Dog dog; Cat cat; dog.speak(); // Woof! cat.speak(); // Meow! ``` Aber wenn ich einen Zeiger auf die Basisklasse verwende, wird die Methode der Basisklasse aufgerufen, nicht die der abgeleiteten Klasse: ```cpp Animal* ptr1 = new Dog(); Animal* ptr2 = new Cat(); ptr1->speak(); // Gibt "Some animal sound" aus, sollte aber "Woof!" sein ptr2->speak(); // Gibt "Some animal sound" aus, sollte aber "Meow!" sein ```