class Cooperate{
  virtual do();
};class CooperateAB: public Cooperate{
  virtual do()
  {
     a.opA();
     b.opB();
  }
};class CooperateCB: public Cooperate{
  virtual do()
  {
     c.opC();
     b.opB();
  }
};

解决方案 »

  1.   

    Cooperte * ClsMain::GetCooperate()
    {
      if (某些条件)return new CooperateAB();
      else return new CooperateCB();
      .....
    }
      

  2.   

    关键在于clsMain中要保存自己的状态,动态改变clsA为clsC后更新状态。
    用State模式
      

  3.   

    先谢谢各位。 :)
    WhiteWaterBlueSky不要着急,我的问题还没完。
    如果我希望这个操作clsMain只实现一次,不用改变,新加入的类(clsA一个级别的)来实现,这样可以减少clsMain同clsA级别的类的耦合。我该如何办理?
      

  4.   

    class Base
    {
    public: virtual void do();
    };class A: public Base{
    public:
     virtual void do(){ this->do(); b->do(); }
    }class B: public Base{
    public:
     virtual void do(){ this->do(); c->do(); }
    }class clsMain
    {
    public:
      void doByControlOf(Base *b)
      {
        b->do();
      }
    }
      

  5.   

    不好意思,写得有点问题,重新修改:class Base
    {
    public: virtual void do();
    };class Cooperate
    {
    public: virtual void cooperate();
    }class A: public Base, Cooprate{
    public:
    virtual void cooperate(){ this->do(); b->do(); }
    void do(){ printf("a");}
    }class B: public Base, Cooperate{
    public:
    virtual void cooperate(){ this->do(); c->do(); }
    void do(){ printf("b");}
    }class clsMain
    {
    public:
      void doByControlOf(Cooperate *b)
      {
        b->cooperate();
      }
    }