Solution: Composite Design Pattern
Get a detailed explanation of the solution to the composite design exercise.
We'll cover the following...
Solution
Press + to interact
#include <iostream>#include <set>#include <string>class Grafik {public:virtual void print() const = 0;virtual ~Grafik() {}};class GrafikKompositum : public Grafik {std::set<Grafik const*> children;public:void print() const {for (const auto& child: children) child->print();}void add(Grafik const* component) {children.insert(component);}void remove(Grafik const* component) {children.erase(component);}};class Ellipse: public Grafik {public:void print() const {std::cout << "Ellipse ";}};class Circle: public Grafik {public:void print() const {std::cout << "Circle ";}};void printGrafik(const std::string& name, const Grafik* graph){std::cout << name;graph->print();std::cout << "\n\n";}int main(){Ellipse ellipse1, ellipse2, ellipse3, ellipse4;Circle circle1, circle2;GrafikKompositum grafik1, grafik2, grafikGesamt;grafik1.add(&ellipse1);grafik1.add(&ellipse2);grafik1.add(&ellipse3);grafik2.add(&ellipse4);grafikGesamt.add(&grafik1);grafikGesamt.add(&grafik2);printGrafik("grafikGesamt.print(): ", &grafikGesamt);grafik1.add(&circle1);grafik2.add(&circle2);printGrafik("grafik2.print(): ", &grafik2);printGrafik("grafikGesamt.print(): ", &grafikGesamt);grafik1.remove(&ellipse1);grafik2.remove(&ellipse4);printGrafik("grafikGesamt.print(): ", &grafikGesamt);}
Code explanation
We ...