读书人

被虚函数搞糊涂了大神们进来帮忙解释

发布时间: 2012-11-07 09:56:10 作者: rapoo

被虚函数搞糊涂了,大神们进来帮忙解释下
void CDbInterface::LoadParaCallback(LPVOID arg,LPVOID threadarg)
{
CWorkItem* pWork=(CWorkItem*)arg;
CDbInterface* pDb=(CDbInterface*)threadarg;
CDbResult* pDbResult=(CDbResult*)pWork->Arg;

//pDbResult->m_pResult=NULL;
//pDbResult->m_nCount=0;
//return ;

//if(pDbResult->m_ActType!=_update_del)//按各自编码加载
{
if(pDbResult->m_ParaType==_loadrtupara)
pDbResult->m_pResult=pDb->LoadRtuPara(pDbResult->m_ID,pDbResult->m_nCount);

LoadRtuPara()是个在CDbInterface里声明的虚函数,CDbInterface有两个子类A和B,A和B里都重写了这个虚函数,这里pDb调用的是哪个类的LoadRtuPara()函数啊。。。。。。

[解决办法]
你的threadarg是怎么传递进来的?
Debug下F11进入看看不就清楚了~
[解决办法]
这就要看你的 那个基类指针, 它指向A类的对象,则调用A的,指向B的,则调用B的.

CDbInterface* pDb=(CDbInterface*)threadarg;

在你的代码中, 就由 threadarg 来决定了, 你调用LoadParaCallback的时候传入的是A类还是B类对象的指针呢.

读书人网 >C++

热点推荐