#include <iostream>
#include <memory>

class Animal {
public:
    virtual void speak() const {
        std::cout << "Animal speaks" << std::endl;
    }

    virtual ~Animal() = default;
};

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;
    }
};

int main() {
    std::unique_ptr<Animal> animals[2];

    animals[0] = std::make_unique<Dog>();
    animals[1] = std::make_unique<Cat>();

    for (const auto& animal : animals) {
        animal->speak(); // Calls the appropriate speak() method
    }

    // No need to manually delete as unique_ptr handles it
    return 0;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: