229199496

C++ 内层类 对外层类进行操作

这两天帮朋友看一个课程设计,需要用到两个类  形成嵌套。 要求内部类 能处理外部类 的内容。刚开始自然想到的是回调函数思想,后来想了一下可以这样实现:

一些最初的问题

1.  内部类调用外部类 自然产生了越界的想法, 首先是封装性的问题。

2.  使用接口来完成这种调用,需要获取外部类的地址 , 在运行时,将该地址传给内部类的外部接口指针。

这个问题也没有太大的难度,就是用的少了一些。但是想想蛮有意思的,就做了一下。

思想:  在内层类设计一个指向 外层类接口的指针 , 那么就可以通过这个接口指针完成内层类对外层类操作的调用 , 如何得到

设计如下:

  用组件模型来完成, 内层类为 客户类 C      外层类为 窗口类 W

interface  IC //
{
    virtual void _stdcall Fc1()=0;
    virtual void _stdcall Fc2()=0;
};

interface  IW //: public IC
{
    virtual void _stdcall Fw1()=0;
    virtual void _stdcall Fw2()=0;
};

 

class  CC : public IC
{
   public :
   virtual void _stdcall Fc1(){cout <<"CC::Client1"<<endl;   pIW_in_CC->Fw1();  }
   virtual void _stdcall Fc2(){cout <<"CC::Client2"<<endl;}
   IW *pIW_in_CC;
};

 

class CW : public IW
{
public:
    CW();
    virtual void _stdcall Fw1(){cout<< "CW::Windows1"<<endl; }                       
    virtual void _stdcall Fw2(){cout<< "CW::Windows2"<<endl;}

     virtual void _stdcall FI_1( CW  *pTemp_CW ){ C_Example->pIW_in_CC = pTemp_CW;}
     virtual CC *  _stdcall FI_2( ){ return C_Example;}
protected:

        CC *C_Example;   //指向内层类的指针
        IC *pIC_in_CW;
};

CW :: CW()
{    
         C_Example = new CC;   //保存内层类的地址
         pIC_in_CW = NULL;
}


int main()
{
    trace ("Client : Create an instance of the component.");
    CW *pW = new CW;   //生成一个外层组件CW  其中就自然包括生成了一个内层组件CC

    pW->FI_1(pW);        //使得内层类的 指向外层类接口的指针指向外层类

                                   //那么这样,就可以用内层类来获取外层类的操作。但是还剩下最后一个问题:

                                   //我们只有外层类的地址,没有内层类的地址,那么内层类的接口在哪里呢?

                                   //在外层类结构里,我们用链表的形式来生成了内层类,那么内层类的地址就保存在C_Example中(在FI_2())函数中处理。

    IC *pIC = pW->FI_2();   
    pIC->Fc1();               //那么自然就可以使用内层类的接口来完成这种越界调用了

    return 0;   

}

 


 

posted on 2009-02-16 22:49  Rs  阅读(415)  评论(0编辑  收藏  举报

导航