• c++ 组合模式示例



    #include
    #include
    #include
    using namespace std;

    template
    void ReMoveAll(T T1)
    {
            vector::iterator ite = T1->begin();
            while(ite != T1->end())
            {
                if(*ite != NULL)
                {
                    delete *ite;
                    *ite = NULL;
                }
                T1->erase(ite);
                ite = T1->begin();
            }
    }
    // 抽象的部件类描述将来所有部件共有的行为
    class Component //:public CObject
    {
    public:
        Component() { };
        virtual ~Component(){ }
    public:
        int m_ParentID;
        int m_ID;
    public:
        void SetID(int m){    m_ID = m;}
        void SetParentID(int n){    m_ParentID = n;}

    };
    //<数据类型><类名>::<静态数据成员名>=<值>
    //static vector *v = NULL;

    class Leaf :public Component
    {
    public:
        Leaf(){};
        Leaf(int m ,int n)
        {
            m_ParentID = m;
            m_ID = n;
            cout <<  "ParentID: " <     };
        virtual ~Leaf(){};
    };

    class Composite :public Component
    {    
    public:
        Composite()    {};    
        virtual ~Composite() {    }
    };

    class MainComposite :public Composite
    {
    public:

        MainComposite()
        {
            m_ParentID = 0;
            m_ID = 0;
            cout <<  "ParentID: " <     };
        virtual ~MainComposite(){};
    };
    class Client  
    {
    public:
        Client ()
        {
            if(v == NULL)  
            v  = new vector ;
        };
        virtual ~Client()
        {
            //删除所有
            ReMoveAll(v);
        };
    public:

         void CreateMainGroup()
         {
            Component *pNewElem = new MainComposite;
            v->push_back(pNewElem);
            for (int i = 0; i < 4; i++)
            {
                Component *pNewElem1 = new Leaf(0,i+1);        
                v->push_back(pNewElem1);            
            }

         };
         void CreateLeaf(int m , int n)
         {
             Component *pNewElem = new Leaf(m, n);
             v->push_back(pNewElem);
         };
    };

    int Test5()
    {
        Client *c = new Client;
        
        c->CreateMainGroup();
        c->CreateLeaf(v->size()-1 ,v->size());
        cout << "Total: " << v->size() << endl;
        delete c ;
        return 0;
    }
    int main()
    {
    Test5();
    system("pause"); 
        return 0;
    }
     

  • 相关阅读:
    每日练习------实现双色球的彩票功能。规则:从36个红球中随机选择不重复的6个数,从15个篮球中随机选择1个组成一注彩票。可以选择买多注。
    Flowable 的使用
    全志F133(D1s)芯片 如何在Tina下进行显示旋转?
    【Java】网络层协议IP协议
    国标视频平台搭建(五)设备接入
    Python读取文件
    C++中的this指针、访问控制和构造函数
    【SSM】Myeclipse & idea 的版 ssm框架——整合过程
    程序员凭本事赚钱被没收所得,是否体现了“重刑主义”?
    1036 跟奥巴马一起编程
  • 原文地址:https://blog.csdn.net/jxb_8888/article/details/127951390