#include #include using namespace std; struct Produkt { virtual ~Produkt() {} virtual string info() = 0; }; struct Fabrik { virtual ~Fabrik() {} virtual Produkt* erzeuge(string const&) = 0; }; class KonkretesProdukt : public Produkt { private: string const _info; public: KonkretesProdukt(const string& i) : _info(i) {} virtual string info() {return _info;} }; class KonkreteFabrik : public Fabrik { private: vector produkte; public: ~KonkreteFabrik() { for(Produkt* p : produkte) { cout << "Lösche Produkt " << p->info() << endl; delete p; } } Produkt* erzeuge(const string& s) { Produkt* newProduct = new KonkretesProdukt(s); produkte.push_back(newProduct); return newProduct; } }; int main() { Fabrik* fabrik = new KonkreteFabrik(); Produkt* p1 = fabrik->erzeuge("p1"); cout << "Erzeugtes Produkt: " << p1->info() << endl; Produkt* p2 = fabrik->erzeuge("p2"); cout << "Erzeugtes Produkt: " << p2->info() << endl; delete fabrik; } /* Erwartete Ausgabe: Erzeugtes Produkt: p1 Erzeugtes Produkt: p2 Lösche Produkt p1 Lösche Produkt p2 */