首先看一下下面的代码
class CTaskBase
{
private:
/*1.需子类实现的纯虚函数*/
virtual bool OnTaskStart() = 0;
virtual void OnTaskStop() = 0;
virtual void OnDealReportTask(CVorxProto* pTask) = 0;
virtual void OnDealQueryTask(CVorxProto* pTask) = 0;
virtual void OnDealHeartReturn(CVorxProto* pTask) = 0;
virtual void OnDealHeartQuery(CVorxProto* pTask) = 0;
}
这个类中包含了纯虚函数,包含了纯虚函数的类,不能被实例化,比如 CTaskBase tb =new CTaskBase();,是不行的。
当派生出一个类:
class CMatrixAgent: public CTaskBase
{
virtual bool OnTaskStart() = 0;
virtual void OnTaskStop() = 0;
virtual void OnDealReportTask(CVorxProto* pTask) = 0;
virtual void OnDealQueryTask(CVorxProto* pTask) = 0;
virtual void OnDealHeartReturn(CVorxProto* pTask) = 0;
virtual void OnDealHeartQuery(CVorxProto* pTask) = 0;
}
这些函数必须在.cpp里实现:
bool CMatrixAgent::OnTaskStart()
{
m_thread.StartThread();
return true;
}
void CMatrixAgent::OnTaskStop()
{
}
void CMatrixAgent::OnDealReportTask(CVorxProto* pTask)
{
}
void CMatrixAgent::OnDealQueryTask(CVorxProto* pTask)
{
}
void CMatrixAgent::OnDealHeartReturn(CVorxProto* pTask)
{
}
void CMatrixAgent::OnDealHeartQuery(CVorxProto* pTask)
{
}
如果不这样,就会有"cannot instantiate abstract class due to following members"的提示。
转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12295287