class GUIBASE
{
    public:
        HWND    hWnd;        virtual void onLoad(void){};
        virtual void onUnload(void){};
        virtual void onClick(void){};
};class cWindow:public GUIBASE
{
    public:
         void onLoad(void){};
    void onUnload(void){};
    void onClick(void){};
};class MyWindow:public cWindow
{
    public:
        void onLoad(void){MessageBox(null,"被成功调用了!", "测试", MB_OK);};
};-----------------------------
我的问题是! 当创建一个 MyWindow 的对象时 在cWindow中如何调用 MyWindow 的 onLoad 方法?
难点在于MyWindow与cWindow下分离开的!我的意思是说在cWindow操作时完全不知道有 MyWindow这么一个子类!也就是操作任何从cWindow派生的子类的方法!有办法吗?从原理上来看
~~~~~~~~~~~~~~~~~~~~~~
因为 GUIBASE 和 cWindow 都是不需要实现的!也就是说他们没有对象的!
而你生成的对象都是派生类 MyWindow的对象, 所以我认为按原理说应该是
父类的对象不能调用派生类MyWindow的对象的成员才合理!
而通过声明指向基类GUIBASE的指针通过虚特性,应该可以调用派生类的对象的虚函数实现才对的吧! 应为生成的对象是派生类MyWindow的对象呀!不过我就是没有搞成功! 问题在于指针声明成那一个类的它就只能调用那个杰的对应的虚函数的实现体!而我不可能把指针声明成的派生类的类型。因为我要的是派生类可以重新实现虚函数,也可以不实现!当不实现时就用 cWindow 的对应虚函数实现体!我被困很久了!我的目的是要用面向对象的思想来包装一个自己的 windows 程序的基本框架!
也就是像我做要一个库! GUIBASE, cWindow 是我自定义和实现的!而 MyWindow 对库来说是不可知的!因为用库编程人员从cWindow派生出去后给的类名对“库”来说是不可知的!

解决方案 »

  1.   

    借用COM的实现原理,
    可以定义个虚基类,也就是接口给用户
      

  2.   

    把各个类中的onLoad都定义为虚函数。
      

  3.   

    没明白你的困难在哪,例如下面的做法不行吗?
    class GUIBASE
    {
    public: 
        virtual void onLoad(void){}
    };class cWindow : public GUIBASE
    {
    public:
        virtual void onLoad(void)
        {
            GUIBASE::onLoad();
        };
    };class MyWindow : public cWindow
    {
    public:
        virtual void onLoad(void)
        {
            MessageBox(NULL, "被成功调用了!", "测试", MB_OK);
        }
    };
      

  4.   

    在cWindow中如何调用 MyWindow 的 onLoad 方法? 
    这个是指什么呀,是不是说定义了一个cWindow对象但想用它来调用MyWindow 的 onLoad 方法
    如果是这样的话你可以在对cWindow实例化MyWindow这样当这个对象调用onLoad 方法时就默认为是MyWindow的onLoad方法