天天看點

c++中的純虛函數和提示"cannot instantiate abstract class due to following members"

首先看一下下面的代碼

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