Callback 实现

来源:互联网 发布:excel怎么填充数据 编辑:程序博客网 时间:2024/05/22 00:41

#include <iostream>

class ICallback

{

public:

      virtual void Do(int MsgID) =0;

};

 

class A

{

      public:

            A()

            {

                  m_pCallback = 0;

            }

            voidRegisterCallback(ICallback* pCall)

            {

                  m_pCallback = pCall;

            }

            voidActiveA(int MsgID)

            {

                  if(m_pCallback!= 0)

                        m_pCallback->Do(MsgID);

            }

      protected:

            ICallback* m_pCallback;

};

 

 

 

class B

{

      classCCallback:public ICallback

      {

      public:

            CCallback(){}

             

            CCallback(B* pB)

            { 

                  m_pB = pB;

            }

            void Do(int Msg)

            {

                  std::cout<<"B dose something"<<std::endl;

            }

      private:

            B* m_pB;

      };

 

     

     

      public:

            CCallback* m_pCall;

            A* m_pA;

        void SetA(A*pA)

            {

                  pA->RegisterCallback (m_pCall);

            }

            B()

            {

                  m_pCall = newCCallback(this);

            }

};

void main()

{

      A* a;

      a=new A();

      B* b;

      b=new B();

      b->SetA (a);

      a->ActiveA (0);

 

 

}

原创粉丝点击