读书人

直接调用纯虚函数什么意义?解决办法

发布时间: 2012-02-08 19:52:21 作者: rapoo

直接调用纯虚函数什么意义?
如下面的调用:
void CManager::Run()
{
while( WaitForSingleObject(m_hKillEvent, 0) != WAIT_OBJECT_0 ){
PTRMSG pMsg = m_msgQueue.WaitForNormalMessage(1000);
if( pMsg ){
OnMessage(pMsg);
DeleteMessage(pMsg);
}
}
}

该函数所在是Manager.cpp文件,其在头Manager.h文件中的定义为:
virtual BOOL OnMessage(PTRMSG pMsg) = NULL;

这里的OnMessage(pMsg)是直接调用纯虚函数吧?有什么意义呢?




[解决办法]
CManager是纯许类,需要对进行实例化才可以使用,那时OnMessage就有实现了
OnMessage(pMsg)和DeleteMessage(pMsg)不是CManager 的函数吗? 你不把头文件列出来,鬼知道OnMessage(pMsg)和DeleteMessage(pMsg)是什么东西
[解决办法]
再土问个,为何OnMessage(pMsg)和DeleteMessage(pMsg)的调用是直接调用,函数前没有对象呢?:)
=================================
因为调用者和被调用者都是一个类或类族.


[解决办法]
这里的OnMessage(pMsg)是直接调用纯虚函数吧?有什么意义呢?
======================================
如果CManager本身是基类.且是声明OnMessage(pMsg)的类.那么它的派生类一定要改写OnMessage()函数. 这就成了CManager::Run()中调用一个还不存在的留待后来实现的函数. 这是框架的基本做法.

读书人网 >C++

热点推荐