类的派生
我有A,B,C三个对话框均派生自CDialog,现在有一个ctelnet类( 派生自CAsyncSocket),三个对话框均需要使用ctelnet这个类,ctelnet中有一个OnReceive的方法,要调用A,B,C中的ProcessMessage方法,有好的方法或思路码?
1、有没有可能在CDialog中增加一个虚函数,然后A,B,C中重载,来实现?
2、有没有可能多重派生吗?
3、其他办法?
[解决办法]
额,看实际的需求.你可以每个dialog类实例化一个ctelnet.也可以单独一个地方实例化1个ctelnet,在单独一个函数里解析,再根据解析的结果通知各个dialog
[解决办法]
首先定义一个类 CBaseDlg 继承至 CDialog,在这个类里面声明一个虚方法 ProcessMessage;
ctelnet 类中 声明一个 CBaseDlg * dlg ,也就是一个基类的指针成员变量;
在ctelnet中有一个OnReceive的方法中调用dlg->ProcessMessage();
A,B,C三个对话框从CBaseDlg派生而来,重载ProcessMessage方法。
在A、B、C三个对话框中把各自的this指针传递给 ctelnet变量即可。
[解决办法]
如果ctelnet类外部不会使用到的话,可以封装在其他类里。
[解决办法]
class D
{
public:
virtual void ProcessMessage() = 0;
};
class A : public CDialog, public D
{
};
class B : public CDialog, public D
{
};
class C : public CDialog, public D
{
};
class ctelnet
{
public:
ctelnet(){}
void OnReceive(D* pD)
{
pD->ProcessMessage();
}
};