場景:
定義了一個 CTask 抽象類
class CTask
{
protected:
string m_strTaskName; /** 任務的名稱 */
void* m_ptrData; /** 要執行的任務的具體數據 */
public:
CTask() {}
CTask(string taskName)
{
m_strTaskName = taskName;
m_ptrData = NULL;
}
virtual int Run() = 0;
void SetData(void* data); /** 設置任務數據 */
public:
virtual ~CTask() {}
};
vector<CTask> vTasks;
CTask task1; //創建對象報錯
vTasks.push_back(task1);
原因:
抽象類不能實例化,需要在派生類中實現基類所有定義的純虛函數,只要有一個純虛函數沒有定義,那么派生類還是抽象類。仍然不能實例化。
解決方法:
//用指針
vector<CTask*> vTasks;
CTask *task1;
vTasks.push_back(task1);
//派生類實現基類純虛函數
class CMyTask : public CTask
{
public:
CMyTask() {}
inline int Run()
{
printf("%s/n", (char*)this->m_ptrData);
//Sleep(10*1000);
return 0;
}
};
CMyTask taskObj; //派生類可以創建對象
vTasks.push_back(&taskObj);
