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
```
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen