#include <iostream>
class Animal {
public:
virtual void speak() const {
std::cout << "Animal makes a sound." << std::endl;
}
};
class Dog : public Animal {
public:
void speak() const override {
std::cout << "Dog barks." << std::endl;
}
};
class Cat : public Animal {
public:
void speak() const override {
std::cout << "Cat meows." << std::endl;
}
};
void makeAnimalSpeak(const Animal& animal) {
animal.speak(); // Calls the appropriate speak() method based on the object type
}
int main() {
Dog dog;
Cat cat;
makeAnimalSpeak(dog); // Outputs: Dog barks.
makeAnimalSpeak(cat); // Outputs: Cat meows.
return 0;
}