#include <iostream>
#include <memory>
using namespace std;

class animal{
    public:
    virtual ~animal() = default;
    virtual void sound() = 0;
};
class cat: public animal{
    public:
    void sound() override{
        cout<<"Miaaaaau!\n";
    }
};
class dog: public animal{
    public:
    void sound() override{
        cout<<"Hau hau!\n";
    }
};

class factory{
    public:
    virtual ~factory() = default;
    virtual unique_ptr<animal> createanimal() = 0;
};
class catfactory : public factory{
    public:
    unique_ptr<animal> createanimal() override{
        return make_unique<cat>();
    }
};
class dogfactory : public factory{
    public:
    unique_ptr<animal> createanimal() override{
        return make_unique<dog>();
    }
};
int main() {
    catfactory stworzkota;
    unique_ptr<animal> kot = stworzkota.createanimal();
    kot->sound();

    dogfactory stworzpsa;
    unique_ptr<animal> pies = stworzpsa.createanimal();
    pies->sound();
    return 0;
}

Embed on website

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