PaiusCatalin9577

composite

May 29th, 2015
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3.  
  4. template <class T>
  5.  
  6. class Parent{
  7. protected:
  8.     Parent *parinte;
  9. public:
  10.     virtual void output() = 0;
  11.     virtual void SetParent(Parent *instance){
  12.         this->parinte = instance;
  13.     }
  14. };
  15.  
  16. template <class T>
  17. class Leaf1 : public Parent<T>{
  18. private:
  19.     T LeafItem;
  20. public:
  21.     Leaf1(){};
  22.     Leaf1(T item){
  23.         this->LeafItem = item;
  24.     }
  25.     void SetItem(T item){
  26.         this->LeafItem = item;
  27.     }
  28.     T GetItem(){
  29.         return this->LeafItem;
  30.     }
  31.     void output(){
  32.         std::cout << this->LeafItem << " ";
  33.     }
  34. };
  35.  
  36. template <class T>
  37. class Leaf2 : public Parent<T>{
  38. private:
  39.     T Leaf2Item;
  40. public:
  41.     Leaf2(){};
  42.     Leaf2(T item){
  43.         this->Leaf2Item = item;
  44.     }
  45.     void SetItem(T item){
  46.         this->Leaf2Item = item;
  47.     }
  48.     T GetItem(){
  49.         return this->Leaf2Item;
  50.     }
  51.     void output(){
  52.         std::cout << this->Leaf2Item << " ";
  53.     }
  54. };
  55.  
  56. template <class T>
  57. class Composite : public Parent<T>{
  58. private:
  59.     std::vector<Parent *> Children;
  60. public:
  61.     void AddChild(Parent * kid){
  62.         Children.push_back(kid);
  63.         kid->SetParent(this);
  64.     }
  65.     void output(){
  66.         for (int i = 0; i < Children.size(); ++i){
  67.             Children[i]->output();
  68.         }
  69.     }
  70. };
  71.  
  72. template <class T>
  73. void main(void){
  74.     Composite<int> *Composer[20];
  75.     for (int i = 0; i < 10; ++i){
  76.         Composer[i]->AddChild(new Leaf1(i));
  77.         ++i;
  78.         Composer[i]->AddChild(new Leaf2(i));
  79.     }
  80.  
  81.     for (int i = 0; i < 5; ++i){
  82.         Composer[i]->output();
  83.     }
  84. }
Add Comment
Please, Sign In to add comment