首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

种的派生

2012-08-14 
类的派生我有A,B,C三个对话框均派生自CDialog,现在有一个ctelnet类( 派生自CAsyncSocket),三个对话框均需

类的派生
我有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();
}

};

热点排行