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

class przycisk{
    public: 
    int szerokosc;
    int wysokosc;
    
    virtual ~przycisk() = default;
    virtual void infoprzycisk() = 0;
    
};
class motyw{
    public:
    string kolor;

    virtual ~motyw() = default;
    virtual void infomotyw() = 0;
};

class winprzycisk: public przycisk{
    public:
    virtual void infoprzycisk() override{
        cout<<"Przycisk w stylu windows\n";
        cout<<"Szerokosc: "<<szerokosc<<", wysokosc: "<<wysokosc<<endl;
    }
};
class winmotyw: public motyw{
    public:
    virtual void infomotyw() override{
        cout<<"Motyw w stylu windows\n";
        cout<<"Kolor: "<<kolor<<endl;
    }
};

class macprzycisk: public przycisk{
    public:
    virtual void infoprzycisk() override{
        cout<<"Przycisk w stylu mac\n";
        cout<<"Szerokosc: "<<szerokosc<<", wysokosc: "<<wysokosc<<endl;
    }
};
class macmotyw: public motyw{
    public:
    virtual void infomotyw() override{
        cout<<"Motyw w stylu mac\n";
        cout<<"Kolor: "<<kolor<<endl;
    }
};
class fabryka{
    public:
    virtual ~fabryka() = default;

    virtual unique_ptr<przycisk> stworzprzycisk() = 0;
    virtual unique_ptr<motyw> stworzmotyw() = 0;
};
class fabrykawin : public fabryka{
    public:

    unique_ptr<przycisk> stworzprzycisk() override{
        return make_unique<winprzycisk>();
    }
    unique_ptr<motyw> stworzmotyw() override{
        return make_unique<winmotyw>();
    }
};
class fabrykamac : public fabryka{
    public:

    unique_ptr<przycisk> stworzprzycisk() override{
        return make_unique<macprzycisk>();
    }
    unique_ptr<motyw> stworzmotyw() override{
        return make_unique<macmotyw>();
    }
};

// Funkcja pomocnicza przyjmująca fabrykę przez referencję
void gotowe(fabryka& Fabryka) {
    auto p = Fabryka.stworzprzycisk();
    auto m = Fabryka.stworzmotyw();
    
    p->szerokosc = 100;
    p->wysokosc = 30;
    m->kolor = "Niebieski";

    p->infoprzycisk();
    m->infomotyw();
}

int main() {
    fabrykawin fabrykaWindows;
    gotowe(fabrykaWindows); // Wywołanie funkcji dla Windows

    cout << "-----------------\n";

    fabrykamac fabrykaMac;
    gotowe(fabrykaMac);     // Wywołanie funkcji dla Mac

    return 0;
}

Embed on website

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