2026-06-29 21:18:48 +02:00

67 lines
1.2 KiB
C++

#include <iostream>
#include <vector>
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<Produkt*> 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
*/