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派生出去后给的类名对“库”来说是不可知的!
{
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派生出去后给的类名对“库”来说是不可知的!
解决方案 »
- 如何获得一个Dialog上的Edit Control的Enter
- C#调用MFC开发的ACTIVEX,怎么传入字符串,ACTIVEX里的字符串用什么类型?
- VC在线程中调用CWEBBROWSER控件编译通过运行报错..为什么谢谢.
- 请教OLE将IDataObject放在什么地方?
- 怎么做一个上网的代理,能不能指点一下,高分
- MSN上的传送文件的进度条是用什么做的?
- 【〓 水晶报表简单问题 〓】
- 是当聪明的程序员,还是当真正的程序员?
- 关于注册表run的问题
- activex 加载问题
- 基于udp的网络通信,有必要为每一个新加入的客户端开启一个新的线程么? (客户端数量不确定)
- 程序延迟一段时间再继续处理?
可以定义个虚基类,也就是接口给用户
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);
}
};
这个是指什么呀,是不是说定义了一个cWindow对象但想用它来调用MyWindow 的 onLoad 方法
如果是这样的话你可以在对cWindow实例化MyWindow这样当这个对象调用onLoad 方法时就默认为是MyWindow的onLoad方法