#include <iostream>

class Animal
{
 public:
  virtual void eat()
  {
    std::cout << "Tier isst" << std::endl;
  }
};

class Cat : public Animal
{
 public:
  void eat() override
  {
    std::cout << "Katze isst eine Maus" << std::endl;
  }
};

class Mouse : public Animal
{
 public:
  void eat() override
  {
    std::cout << "Maus isst K\204se" << std::endl;
  }
};

class Worm : public Animal
{
};

int main()
{
  // Die Standardimplementierung der Oberklasse
  Animal tier;
  tier.eat();

  // Jeweils eine eigene Implementierung
  Cat cat;
  cat.eat();
  Mouse mouse;
  mouse.eat();

  // Nochmals die Standardimplementierung der Oberklasse
  Worm worm;
  worm.eat();
  return 0;
}
