首先看一下下面的代碼
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