From 68da0a4b6c723da0cb6f25a09a07906a4191291e Mon Sep 17 00:00:00 2001 From: Michael Mandl Date: Thu, 14 Mar 2024 20:25:58 +0100 Subject: [PATCH] feat: implement Composite --- Composite/main.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/Composite/main.cpp b/Composite/main.cpp index 1e4fb84..3e129f7 100644 --- a/Composite/main.cpp +++ b/Composite/main.cpp @@ -1,8 +1,60 @@ #include +#include +#include + +class Node { +public: + virtual ~Node() = default; + virtual void print() const = 0; +}; + +class InnerNode : public Node { +private: + std::string name_; + std::vector children_; + +public: + InnerNode(std::string_view name) : name_(name) {} + + void addNode(Node *node) { children_.push_back(node); } + + void print() const override { + std::cout << name_ << " (inner)" << std::endl; + + for (auto child : children_) { + child->print(); + } + } +}; + +class Leaf : public Node { +private: + std::string name_; + +public: + Leaf(std::string_view name) : name_(name) {} + + void print() const override { std::cout << name_ << " (leaf)" << std::endl; } +}; int main(int argc, char *argv[]) { std::cout << "Composite" << std::endl; + InnerNode tree("root"); + InnerNode left("left"), right("right"); + Leaf leaf1("leaf 1"), leaf2("leaf 2"), leaf3("leaf 3"), leaf4("leaf 4"); + + tree.addNode(&left); + tree.addNode(&right); + + left.addNode(&leaf1); + left.addNode(&leaf2); + + right.addNode(&leaf3); + right.addNode(&leaf4); + + tree.print(); + return EXIT_SUCCESS; }